removed vscrollbar, hscrollbar, vscrollbar_policy, hscrollbar_policy.
authorLars Hamann <lars@gtk.org>
Thu, 5 Nov 1998 15:44:22 +0000 (15:44 +0000)
committerLars Hamann <lars@src.gnome.org>
Thu, 5 Nov 1998 15:44:22 +0000 (15:44 +0000)
Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>

* gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
  vscrollbar_policy, hscrollbar_policy. added h/vadjustment.

* gtk/gtkclist.c (gtk_clist_class_init): added new args types
   "hadjustment" & "vadjustment"
   (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
   set/get_arg functions
  (gtk_clist_construct): don't create/adjust scrollbars.
  (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
  to set h/vadjustments
   (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
  to query h/vadjustments
  (create_scrollbars): removed.
  (create_adjustments): replacement for create_scrollbars
  (gtk_clist_new): call gtk_clist_new_with_titles
  (gtk_clist_new_with_titles): don't warn on titles == NULL
  (move_horizontal): use CLAMP instead
  (gtk_clist_set_policy): deprecated method.
   use gtk_scrolled_window_set_policy instead.
  (vadjustment_value_changed): use clist->vadj.
  (adjust_scrollbars): renamed to adjust_adjustments
  (adjust_adjustments): former adjust_scrollbars
  (gtk_clist_destroy): unref adjustments
  (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
   (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
   (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
  (gtk_clist_thaw) (real_insert_row) (real_remove_row)
  (gtk_clist_set_row_height) (real_resize_column):
  call adjust_adjustments
  (gtk_clist_moveto): return if clist has no adjustments yet.
  (gtk_clist_parent_set): new GtkWidget::parent_set function.
  Autogenerate h/vadjustments if needed.
  (move_horizontal) (move_vertical): some cleanups

* gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
   call only gtk_viewport_set_h/vadjustment and let these functions
   do the work.
  (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
  generate a new adjustment if needed

* gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
   use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible

* gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
   queue_resize if visibility of scrollbars changes
   (gtk_scrolled_window_remove): only call container_remove with
   scrolled_window->viewport automatically if viewport was autogenerated
  (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
  auto create a viewport only if widget does not take h/vadjustments.
  (gtk_scrolled_window_construct): don't generate a viewport
   automatically.
  (gtk_scrolled_window_forall): call callback with viewport in any case
  (gtk_scrolled_window_set_arg): call gtk_container_add in case of
   ARG_VIEWPORT
  (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
  (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
   viewport != NULL

* gtk/testgtk.c
  (create_ctree) (export_ctree) (create_clist): use a scrolled_window
   in conjunction with clists/ctrees

* gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
  in conjunction with clists

* gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
  in conjunction with clists

16 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkclist.c
gtk/gtkclist.h
gtk/gtkfilesel.c
gtk/gtkfontsel.c
gtk/gtkscrolledwindow.c
gtk/gtkscrolledwindow.h
gtk/gtkviewport.c
gtk/testgtk.c
tests/testgtk.c

index b873509e84cf04f9c09124f68c9162b0580c6951..ad8a33cb27b1643da0a784eea68ab04796d36ed6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,73 @@
+Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
+       vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
+
+       * gtk/gtkclist.c (gtk_clist_class_init): added new args types
+       "hadjustment" & "vadjustment"
+        (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
+       set/get_arg functions
+       (gtk_clist_construct): don't create/adjust scrollbars.
+       (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
+       to set h/vadjustments
+       (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
+       to query h/vadjustments
+       (create_scrollbars): removed.
+       (create_adjustments): replacement for create_scrollbars
+       (gtk_clist_new): call gtk_clist_new_with_titles
+       (gtk_clist_new_with_titles): don't warn on titles == NULL
+       (move_horizontal): use CLAMP instead
+       (gtk_clist_set_policy): deprecated method.
+       use gtk_scrolled_window_set_policy instead.
+       (vadjustment_value_changed): use clist->vadj.
+       (adjust_scrollbars): renamed to adjust_adjustments
+       (adjust_adjustments): former adjust_scrollbars
+       (gtk_clist_destroy): unref adjustments
+       (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
+       (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
+       (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
+       (gtk_clist_thaw) (real_insert_row) (real_remove_row)
+       (gtk_clist_set_row_height) (real_resize_column):
+       call adjust_adjustments
+       (gtk_clist_moveto): return if clist has no adjustments yet.
+       (gtk_clist_parent_set): new GtkWidget::parent_set function.
+       Autogenerate h/vadjustments if needed.  
+       (move_horizontal) (move_vertical): some cleanups
+
+       * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
+       call only gtk_viewport_set_h/vadjustment and let these functions
+       do the work.
+       (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
+       generate a new adjustment if needed
+
+       * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
+       use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
+       
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
+       queue_resize if visibility of scrollbars changes
+       (gtk_scrolled_window_remove): only call container_remove with
+       scrolled_window->viewport automatically if viewport was autogenerated
+       (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
+       auto create a viewport only if widget does not take h/vadjustments.
+       (gtk_scrolled_window_construct): don't generate a viewport
+       automatically.
+       (gtk_scrolled_window_forall): call callback with viewport in any case
+       (gtk_scrolled_window_set_arg): call gtk_container_add in case of
+       ARG_VIEWPORT
+       (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
+       (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
+       viewport != NULL
+
+       * gtk/testgtk.c 
+       (create_ctree) (export_ctree) (create_clist): use a scrolled_window
+       in conjunction with clists/ctrees
+
+       * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
+       in conjunction with clists
+
+       * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
+       in conjunction with clists
+
 Wed Nov  4 21:52:57 1998  Lars Hamann  <lars@gtk.org>
 
        * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment
index b873509e84cf04f9c09124f68c9162b0580c6951..ad8a33cb27b1643da0a784eea68ab04796d36ed6 100644 (file)
@@ -1,3 +1,73 @@
+Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
+       vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
+
+       * gtk/gtkclist.c (gtk_clist_class_init): added new args types
+       "hadjustment" & "vadjustment"
+        (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
+       set/get_arg functions
+       (gtk_clist_construct): don't create/adjust scrollbars.
+       (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
+       to set h/vadjustments
+       (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
+       to query h/vadjustments
+       (create_scrollbars): removed.
+       (create_adjustments): replacement for create_scrollbars
+       (gtk_clist_new): call gtk_clist_new_with_titles
+       (gtk_clist_new_with_titles): don't warn on titles == NULL
+       (move_horizontal): use CLAMP instead
+       (gtk_clist_set_policy): deprecated method.
+       use gtk_scrolled_window_set_policy instead.
+       (vadjustment_value_changed): use clist->vadj.
+       (adjust_scrollbars): renamed to adjust_adjustments
+       (adjust_adjustments): former adjust_scrollbars
+       (gtk_clist_destroy): unref adjustments
+       (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
+       (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
+       (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
+       (gtk_clist_thaw) (real_insert_row) (real_remove_row)
+       (gtk_clist_set_row_height) (real_resize_column):
+       call adjust_adjustments
+       (gtk_clist_moveto): return if clist has no adjustments yet.
+       (gtk_clist_parent_set): new GtkWidget::parent_set function.
+       Autogenerate h/vadjustments if needed.  
+       (move_horizontal) (move_vertical): some cleanups
+
+       * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
+       call only gtk_viewport_set_h/vadjustment and let these functions
+       do the work.
+       (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
+       generate a new adjustment if needed
+
+       * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
+       use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
+       
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
+       queue_resize if visibility of scrollbars changes
+       (gtk_scrolled_window_remove): only call container_remove with
+       scrolled_window->viewport automatically if viewport was autogenerated
+       (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
+       auto create a viewport only if widget does not take h/vadjustments.
+       (gtk_scrolled_window_construct): don't generate a viewport
+       automatically.
+       (gtk_scrolled_window_forall): call callback with viewport in any case
+       (gtk_scrolled_window_set_arg): call gtk_container_add in case of
+       ARG_VIEWPORT
+       (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
+       (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
+       viewport != NULL
+
+       * gtk/testgtk.c 
+       (create_ctree) (export_ctree) (create_clist): use a scrolled_window
+       in conjunction with clists/ctrees
+
+       * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
+       in conjunction with clists
+
+       * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
+       in conjunction with clists
+
 Wed Nov  4 21:52:57 1998  Lars Hamann  <lars@gtk.org>
 
        * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment
index b873509e84cf04f9c09124f68c9162b0580c6951..ad8a33cb27b1643da0a784eea68ab04796d36ed6 100644 (file)
@@ -1,3 +1,73 @@
+Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
+       vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
+
+       * gtk/gtkclist.c (gtk_clist_class_init): added new args types
+       "hadjustment" & "vadjustment"
+        (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
+       set/get_arg functions
+       (gtk_clist_construct): don't create/adjust scrollbars.
+       (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
+       to set h/vadjustments
+       (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
+       to query h/vadjustments
+       (create_scrollbars): removed.
+       (create_adjustments): replacement for create_scrollbars
+       (gtk_clist_new): call gtk_clist_new_with_titles
+       (gtk_clist_new_with_titles): don't warn on titles == NULL
+       (move_horizontal): use CLAMP instead
+       (gtk_clist_set_policy): deprecated method.
+       use gtk_scrolled_window_set_policy instead.
+       (vadjustment_value_changed): use clist->vadj.
+       (adjust_scrollbars): renamed to adjust_adjustments
+       (adjust_adjustments): former adjust_scrollbars
+       (gtk_clist_destroy): unref adjustments
+       (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
+       (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
+       (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
+       (gtk_clist_thaw) (real_insert_row) (real_remove_row)
+       (gtk_clist_set_row_height) (real_resize_column):
+       call adjust_adjustments
+       (gtk_clist_moveto): return if clist has no adjustments yet.
+       (gtk_clist_parent_set): new GtkWidget::parent_set function.
+       Autogenerate h/vadjustments if needed.  
+       (move_horizontal) (move_vertical): some cleanups
+
+       * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
+       call only gtk_viewport_set_h/vadjustment and let these functions
+       do the work.
+       (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
+       generate a new adjustment if needed
+
+       * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
+       use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
+       
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
+       queue_resize if visibility of scrollbars changes
+       (gtk_scrolled_window_remove): only call container_remove with
+       scrolled_window->viewport automatically if viewport was autogenerated
+       (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
+       auto create a viewport only if widget does not take h/vadjustments.
+       (gtk_scrolled_window_construct): don't generate a viewport
+       automatically.
+       (gtk_scrolled_window_forall): call callback with viewport in any case
+       (gtk_scrolled_window_set_arg): call gtk_container_add in case of
+       ARG_VIEWPORT
+       (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
+       (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
+       viewport != NULL
+
+       * gtk/testgtk.c 
+       (create_ctree) (export_ctree) (create_clist): use a scrolled_window
+       in conjunction with clists/ctrees
+
+       * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
+       in conjunction with clists
+
+       * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
+       in conjunction with clists
+
 Wed Nov  4 21:52:57 1998  Lars Hamann  <lars@gtk.org>
 
        * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment
index b873509e84cf04f9c09124f68c9162b0580c6951..ad8a33cb27b1643da0a784eea68ab04796d36ed6 100644 (file)
@@ -1,3 +1,73 @@
+Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
+       vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
+
+       * gtk/gtkclist.c (gtk_clist_class_init): added new args types
+       "hadjustment" & "vadjustment"
+        (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
+       set/get_arg functions
+       (gtk_clist_construct): don't create/adjust scrollbars.
+       (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
+       to set h/vadjustments
+       (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
+       to query h/vadjustments
+       (create_scrollbars): removed.
+       (create_adjustments): replacement for create_scrollbars
+       (gtk_clist_new): call gtk_clist_new_with_titles
+       (gtk_clist_new_with_titles): don't warn on titles == NULL
+       (move_horizontal): use CLAMP instead
+       (gtk_clist_set_policy): deprecated method.
+       use gtk_scrolled_window_set_policy instead.
+       (vadjustment_value_changed): use clist->vadj.
+       (adjust_scrollbars): renamed to adjust_adjustments
+       (adjust_adjustments): former adjust_scrollbars
+       (gtk_clist_destroy): unref adjustments
+       (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
+       (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
+       (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
+       (gtk_clist_thaw) (real_insert_row) (real_remove_row)
+       (gtk_clist_set_row_height) (real_resize_column):
+       call adjust_adjustments
+       (gtk_clist_moveto): return if clist has no adjustments yet.
+       (gtk_clist_parent_set): new GtkWidget::parent_set function.
+       Autogenerate h/vadjustments if needed.  
+       (move_horizontal) (move_vertical): some cleanups
+
+       * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
+       call only gtk_viewport_set_h/vadjustment and let these functions
+       do the work.
+       (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
+       generate a new adjustment if needed
+
+       * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
+       use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
+       
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
+       queue_resize if visibility of scrollbars changes
+       (gtk_scrolled_window_remove): only call container_remove with
+       scrolled_window->viewport automatically if viewport was autogenerated
+       (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
+       auto create a viewport only if widget does not take h/vadjustments.
+       (gtk_scrolled_window_construct): don't generate a viewport
+       automatically.
+       (gtk_scrolled_window_forall): call callback with viewport in any case
+       (gtk_scrolled_window_set_arg): call gtk_container_add in case of
+       ARG_VIEWPORT
+       (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
+       (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
+       viewport != NULL
+
+       * gtk/testgtk.c 
+       (create_ctree) (export_ctree) (create_clist): use a scrolled_window
+       in conjunction with clists/ctrees
+
+       * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
+       in conjunction with clists
+
+       * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
+       in conjunction with clists
+
 Wed Nov  4 21:52:57 1998  Lars Hamann  <lars@gtk.org>
 
        * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment
index b873509e84cf04f9c09124f68c9162b0580c6951..ad8a33cb27b1643da0a784eea68ab04796d36ed6 100644 (file)
@@ -1,3 +1,73 @@
+Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
+       vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
+
+       * gtk/gtkclist.c (gtk_clist_class_init): added new args types
+       "hadjustment" & "vadjustment"
+        (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
+       set/get_arg functions
+       (gtk_clist_construct): don't create/adjust scrollbars.
+       (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
+       to set h/vadjustments
+       (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
+       to query h/vadjustments
+       (create_scrollbars): removed.
+       (create_adjustments): replacement for create_scrollbars
+       (gtk_clist_new): call gtk_clist_new_with_titles
+       (gtk_clist_new_with_titles): don't warn on titles == NULL
+       (move_horizontal): use CLAMP instead
+       (gtk_clist_set_policy): deprecated method.
+       use gtk_scrolled_window_set_policy instead.
+       (vadjustment_value_changed): use clist->vadj.
+       (adjust_scrollbars): renamed to adjust_adjustments
+       (adjust_adjustments): former adjust_scrollbars
+       (gtk_clist_destroy): unref adjustments
+       (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
+       (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
+       (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
+       (gtk_clist_thaw) (real_insert_row) (real_remove_row)
+       (gtk_clist_set_row_height) (real_resize_column):
+       call adjust_adjustments
+       (gtk_clist_moveto): return if clist has no adjustments yet.
+       (gtk_clist_parent_set): new GtkWidget::parent_set function.
+       Autogenerate h/vadjustments if needed.  
+       (move_horizontal) (move_vertical): some cleanups
+
+       * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
+       call only gtk_viewport_set_h/vadjustment and let these functions
+       do the work.
+       (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
+       generate a new adjustment if needed
+
+       * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
+       use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
+       
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
+       queue_resize if visibility of scrollbars changes
+       (gtk_scrolled_window_remove): only call container_remove with
+       scrolled_window->viewport automatically if viewport was autogenerated
+       (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
+       auto create a viewport only if widget does not take h/vadjustments.
+       (gtk_scrolled_window_construct): don't generate a viewport
+       automatically.
+       (gtk_scrolled_window_forall): call callback with viewport in any case
+       (gtk_scrolled_window_set_arg): call gtk_container_add in case of
+       ARG_VIEWPORT
+       (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
+       (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
+       viewport != NULL
+
+       * gtk/testgtk.c 
+       (create_ctree) (export_ctree) (create_clist): use a scrolled_window
+       in conjunction with clists/ctrees
+
+       * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
+       in conjunction with clists
+
+       * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
+       in conjunction with clists
+
 Wed Nov  4 21:52:57 1998  Lars Hamann  <lars@gtk.org>
 
        * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment
index b873509e84cf04f9c09124f68c9162b0580c6951..ad8a33cb27b1643da0a784eea68ab04796d36ed6 100644 (file)
@@ -1,3 +1,73 @@
+Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
+       vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
+
+       * gtk/gtkclist.c (gtk_clist_class_init): added new args types
+       "hadjustment" & "vadjustment"
+        (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
+       set/get_arg functions
+       (gtk_clist_construct): don't create/adjust scrollbars.
+       (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
+       to set h/vadjustments
+       (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
+       to query h/vadjustments
+       (create_scrollbars): removed.
+       (create_adjustments): replacement for create_scrollbars
+       (gtk_clist_new): call gtk_clist_new_with_titles
+       (gtk_clist_new_with_titles): don't warn on titles == NULL
+       (move_horizontal): use CLAMP instead
+       (gtk_clist_set_policy): deprecated method.
+       use gtk_scrolled_window_set_policy instead.
+       (vadjustment_value_changed): use clist->vadj.
+       (adjust_scrollbars): renamed to adjust_adjustments
+       (adjust_adjustments): former adjust_scrollbars
+       (gtk_clist_destroy): unref adjustments
+       (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
+       (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
+       (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
+       (gtk_clist_thaw) (real_insert_row) (real_remove_row)
+       (gtk_clist_set_row_height) (real_resize_column):
+       call adjust_adjustments
+       (gtk_clist_moveto): return if clist has no adjustments yet.
+       (gtk_clist_parent_set): new GtkWidget::parent_set function.
+       Autogenerate h/vadjustments if needed.  
+       (move_horizontal) (move_vertical): some cleanups
+
+       * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
+       call only gtk_viewport_set_h/vadjustment and let these functions
+       do the work.
+       (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
+       generate a new adjustment if needed
+
+       * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
+       use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
+       
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
+       queue_resize if visibility of scrollbars changes
+       (gtk_scrolled_window_remove): only call container_remove with
+       scrolled_window->viewport automatically if viewport was autogenerated
+       (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
+       auto create a viewport only if widget does not take h/vadjustments.
+       (gtk_scrolled_window_construct): don't generate a viewport
+       automatically.
+       (gtk_scrolled_window_forall): call callback with viewport in any case
+       (gtk_scrolled_window_set_arg): call gtk_container_add in case of
+       ARG_VIEWPORT
+       (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
+       (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
+       viewport != NULL
+
+       * gtk/testgtk.c 
+       (create_ctree) (export_ctree) (create_clist): use a scrolled_window
+       in conjunction with clists/ctrees
+
+       * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
+       in conjunction with clists
+
+       * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
+       in conjunction with clists
+
 Wed Nov  4 21:52:57 1998  Lars Hamann  <lars@gtk.org>
 
        * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment
index b873509e84cf04f9c09124f68c9162b0580c6951..ad8a33cb27b1643da0a784eea68ab04796d36ed6 100644 (file)
@@ -1,3 +1,73 @@
+Thu Nov  5 16:00:32 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkclist.h (struct _GtkCList): removed vscrollbar, hscrollbar,
+       vscrollbar_policy, hscrollbar_policy. added h/vadjustment.
+
+       * gtk/gtkclist.c (gtk_clist_class_init): added new args types
+       "hadjustment" & "vadjustment"
+        (gtk_clist_set_arg) (gtk_clist_get_arg): new object class
+       set/get_arg functions
+       (gtk_clist_construct): don't create/adjust scrollbars.
+       (gtk_clist_set_hadjustment) (gtk_clist_set_vadjustment): new functions
+       to set h/vadjustments
+       (gtk_clist_get_vadjustment) (gtk_clist_get_hadjustment): new functions
+       to query h/vadjustments
+       (create_scrollbars): removed.
+       (create_adjustments): replacement for create_scrollbars
+       (gtk_clist_new): call gtk_clist_new_with_titles
+       (gtk_clist_new_with_titles): don't warn on titles == NULL
+       (move_horizontal): use CLAMP instead
+       (gtk_clist_set_policy): deprecated method.
+       use gtk_scrolled_window_set_policy instead.
+       (vadjustment_value_changed): use clist->vadj.
+       (adjust_scrollbars): renamed to adjust_adjustments
+       (adjust_adjustments): former adjust_scrollbars
+       (gtk_clist_destroy): unref adjustments
+       (gtk_clist_size_allocate) (gtk_clist_map) (title_focus)
+       (gtk_clist_unmap) (gtk_clist_size_request) (gtk_clist_focus)
+       (gtk_clist_size_allocate) (gtk_clist_forall): don't use scrollbars
+       (gtk_clist_thaw) (real_insert_row) (real_remove_row)
+       (gtk_clist_set_row_height) (real_resize_column):
+       call adjust_adjustments
+       (gtk_clist_moveto): return if clist has no adjustments yet.
+       (gtk_clist_parent_set): new GtkWidget::parent_set function.
+       Autogenerate h/vadjustments if needed.  
+       (move_horizontal) (move_vertical): some cleanups
+
+       * gtk/gtkviewport.c (gtk_viewport_set_arg) (gtk_viewport_new):
+       call only gtk_viewport_set_h/vadjustment and let these functions
+       do the work.
+       (gtk_viewport_set_hadjustment) (gtk_viewport_set_vadjustment):
+       generate a new adjustment if needed
+
+       * gtk/gtkscrolledwindow.h ((struct _GtkScrolledWindow):
+       use a guint bitfield for h/vscrollbar_policy and h/vscrollbar_visible
+       
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_adjustment_changed):
+       queue_resize if visibility of scrollbars changes
+       (gtk_scrolled_window_remove): only call container_remove with
+       scrolled_window->viewport automatically if viewport was autogenerated
+       (gtk_scrolled_window_add): add widget as scrolled_window->viewport.
+       auto create a viewport only if widget does not take h/vadjustments.
+       (gtk_scrolled_window_construct): don't generate a viewport
+       automatically.
+       (gtk_scrolled_window_forall): call callback with viewport in any case
+       (gtk_scrolled_window_set_arg): call gtk_container_add in case of
+       ARG_VIEWPORT
+       (gtk_scrolled_window_size_allocate) (gtk_scrolled_window_size_request)
+       (gtk_scrolled_window_map) (gtk_scrolled_window_unmap): check
+       viewport != NULL
+
+       * gtk/testgtk.c 
+       (create_ctree) (export_ctree) (create_clist): use a scrolled_window
+       in conjunction with clists/ctrees
+
+       * gtk/gtkfilesel.c (gtk_file_selection_init): use a scrolled_window
+       in conjunction with clists
+
+       * gtk/gtkfontsel.c (gtk_font_selection_init): use a scrolled_window
+       in conjunction with clists
+
 Wed Nov  4 21:52:57 1998  Lars Hamann  <lars@gtk.org>
 
        * gtk/gtkctree.c (gtk_ctree_unlink): fix focus_row adjustment
index 0248e97b1140bb571db79a87af193fd464500711..43d96c004f370c1a738b8935d6e37cd16981db4a 100644 (file)
@@ -144,6 +144,12 @@ enum
   SYNC_INSERT
 };
 
+enum {
+  ARG_0,
+  ARG_HADJUSTMENT,
+  ARG_VADJUSTMENT
+};
+
 static void sync_selection (GtkCList * clist,
                            gint row,
                             gint mode);
@@ -186,6 +192,8 @@ static gint gtk_clist_focus           (GtkContainer     *container,
                                       GtkDirectionType  direction);
 static void gtk_clist_style_set       (GtkWidget        *widget,
                                       GtkStyle         *previous_style);
+static void gtk_clist_parent_set      (GtkWidget        *widget,
+                                      GtkWidget        *previous_parent);
 
 /* GtkContainer Methods */
 static void gtk_clist_set_focus_child (GtkContainer  *container,
@@ -282,8 +290,7 @@ static void column_button_clicked     (GtkWidget      *widget,
                                       gpointer        data);
 
 /* Scrollbars */
-static void create_scrollbars         (GtkCList       *clist);
-static void adjust_scrollbars         (GtkCList       *clist);
+static void adjust_adjustments        (GtkCList       *clist);
 static void check_exposures           (GtkCList       *clist);
 static void vadjustment_changed       (GtkAdjustment  *adjustment,
                                       gpointer        data);
@@ -360,6 +367,13 @@ static GList *gtk_clist_mergesort  (GtkCList      *clist,
 /* Misc */
 static gboolean title_focus        (GtkCList      *clist,
                                    gint           dir);
+static void gtk_clist_set_arg      (GtkObject     *object,
+                                   GtkArg        *arg,
+                                   guint          arg_id);
+static void gtk_clist_get_arg      (GtkObject     *object,
+                                   GtkArg        *arg,
+                                   guint          arg_id);
+
 
 static GtkContainerClass *parent_class = NULL;
 static guint clist_signals[LAST_SIGNAL] = {0};
@@ -403,6 +417,15 @@ gtk_clist_class_init (GtkCListClass *klass)
 
   parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
 
+  gtk_object_add_arg_type ("GtkCList::hadjustment",
+                          GTK_TYPE_ADJUSTMENT,
+                          GTK_ARG_READWRITE,
+                          ARG_HADJUSTMENT);
+  gtk_object_add_arg_type ("GtkCList::vadjustment",
+                          GTK_TYPE_ADJUSTMENT,
+                          GTK_ARG_READWRITE,
+                          ARG_VADJUSTMENT);
+
   clist_signals[SELECT_ROW] =
     gtk_signal_new ("select_row",
                    GTK_RUN_FIRST,
@@ -517,6 +540,8 @@ gtk_clist_class_init (GtkCListClass *klass)
 
   gtk_object_class_add_signals (object_class, clist_signals, LAST_SIGNAL);
 
+  object_class->set_arg = gtk_clist_set_arg;
+  object_class->get_arg = gtk_clist_get_arg;
   object_class->destroy = gtk_clist_destroy;
   object_class->finalize = gtk_clist_finalize;
 
@@ -536,6 +561,7 @@ gtk_clist_class_init (GtkCListClass *klass)
   widget_class->focus_out_event = gtk_clist_focus_out;
   widget_class->draw_focus = gtk_clist_draw_focus;
   widget_class->style_set = gtk_clist_style_set;
+  widget_class->parent_set = gtk_clist_parent_set;
 
   /* container_class->add = NULL; use the default GtkContainerClass warning */
   /* container_class->remove=NULL; use the default GtkContainerClass warning */
@@ -628,7 +654,6 @@ gtk_clist_class_init (GtkCListClass *klass)
                                  GTK_TYPE_ENUM, GTK_SCROLL_JUMP,
                                   GTK_TYPE_FLOAT, 1.0, GTK_TYPE_BOOL, TRUE);
 
-
     gtk_binding_entry_add_signal (binding_set, GDK_Left, 0,
                                  "scroll_horizontal", 2,
                                  GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD,
@@ -646,7 +671,6 @@ gtk_clist_class_init (GtkCListClass *klass)
                                  GTK_TYPE_ENUM, GTK_SCROLL_JUMP,
                                   GTK_TYPE_FLOAT, 1.0);
 
-
     gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0,
                                  "undo_selection", 0);
     gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0,
@@ -773,6 +797,54 @@ gtk_clist_class_init (GtkCListClass *klass)
   */
 }
 
+static void
+gtk_clist_set_arg (GtkObject      *object,
+                  GtkArg         *arg,
+                  guint           arg_id)
+{
+  GtkCList *clist;
+  GtkAdjustment *adjustment;
+
+  clist = GTK_CLIST (object);
+
+  switch (arg_id)
+    {
+    case ARG_HADJUSTMENT:
+      adjustment = GTK_VALUE_POINTER (*arg);
+      gtk_clist_set_hadjustment (clist, adjustment);
+      break;
+    case ARG_VADJUSTMENT:
+      adjustment = GTK_VALUE_POINTER (*arg);
+      gtk_clist_set_vadjustment (clist, adjustment);
+      break;
+    default:
+      break;
+    }
+}
+
+static void
+gtk_clist_get_arg (GtkObject      *object,
+                  GtkArg         *arg,
+                  guint           arg_id)
+{
+  GtkCList *clist;
+
+  clist = GTK_CLIST (object);
+
+  switch (arg_id)
+    {
+    case ARG_HADJUSTMENT:
+      GTK_VALUE_POINTER (*arg) = clist->hadjustment;
+      break;
+    case ARG_VADJUSTMENT:
+      GTK_VALUE_POINTER (*arg) = clist->vadjustment;
+      break;
+    default:
+      arg->type = GTK_TYPE_INVALID;
+      break;
+    }
+}
+
 static void
 gtk_clist_init (GtkCList *clist)
 {
@@ -806,8 +878,8 @@ gtk_clist_init (GtkCList *clist)
   clist->voffset = 0;
 
   clist->shadow_type = GTK_SHADOW_IN;
-  clist->hscrollbar_policy = GTK_POLICY_ALWAYS;
-  clist->vscrollbar_policy = GTK_POLICY_ALWAYS;
+  clist->vadjustment = NULL;
+  clist->hadjustment = NULL;
 
   clist->cursor_drag = NULL;
   clist->xor_gc = NULL;
@@ -877,9 +949,6 @@ gtk_clist_construct (GtkCList *clist,
    * isn't there*/
   column_button_create (clist, 0);
 
-  /* create scrollbars */
-  create_scrollbars (clist);
-
   if (titles)
     {
       GTK_CLIST_SET_FLAG (clist, CLIST_SHOW_TITLES);
@@ -895,6 +964,10 @@ gtk_clist_construct (GtkCList *clist,
 /* GTKCLIST PUBLIC INTERFACE
  *   gtk_clist_new
  *   gtk_clist_new_with_titles
+ *   gtk_clist_set_hadjustment
+ *   gtk_clist_set_vadjustment
+ *   gtk_clist_get_hadjustment
+ *   gtk_clist_get_vadjustment
  *   gtk_clist_set_shadow_type
  *   gtk_clist_set_border *** deprecated function ***
  *   gtk_clist_set_selection_mode
@@ -905,14 +978,7 @@ gtk_clist_construct (GtkCList *clist,
 GtkWidget *
 gtk_clist_new (gint columns)
 {
-  GtkCList *clist;
-
-  if (columns < 1)
-    return NULL;
-
-  clist = gtk_type_new (GTK_TYPE_CLIST);
-  gtk_clist_construct (clist, columns, NULL);
-  return GTK_WIDGET (clist);
+  return gtk_clist_new_with_titles (columns, NULL);
 }
  
 GtkWidget *
@@ -921,15 +987,97 @@ gtk_clist_new_with_titles (gint   columns,
 {
   GtkWidget *widget;
 
-  g_return_val_if_fail (titles != NULL, NULL);
-  
   widget = gtk_type_new (GTK_TYPE_CLIST);
-  
   gtk_clist_construct (GTK_CLIST (widget), columns, titles);
-
   return widget;
 }
 
+void
+gtk_clist_set_hadjustment (GtkCList      *clist,
+                          GtkAdjustment *adjustment)
+{
+  g_return_if_fail (clist != NULL);
+  g_return_if_fail (GTK_IS_CLIST (clist));
+  if (adjustment)
+    g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
+  
+  if (clist->hadjustment && (clist->hadjustment != adjustment))
+    {
+      gtk_signal_disconnect_by_data (GTK_OBJECT (clist->hadjustment), clist);
+      gtk_object_unref (GTK_OBJECT (clist->hadjustment));
+    }
+
+  if (!adjustment)
+    adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,
+                                                    0.0, 0.0, 0.0));
+
+  if (clist->hadjustment != adjustment)
+    {
+      clist->hadjustment = adjustment;
+      gtk_object_ref (GTK_OBJECT (clist->hadjustment));
+      gtk_object_sink (GTK_OBJECT (clist->hadjustment));
+
+      gtk_signal_connect (GTK_OBJECT (clist->hadjustment), "changed",
+                         (GtkSignalFunc) hadjustment_changed,
+                         (gpointer) clist);
+      gtk_signal_connect (GTK_OBJECT (clist->hadjustment), "value_changed",
+                         (GtkSignalFunc) hadjustment_value_changed,
+                         (gpointer) clist);
+    }
+}
+
+GtkAdjustment *
+gtk_clist_get_hadjustment (GtkCList *clist)
+{
+  g_return_val_if_fail (clist != NULL, NULL);
+  g_return_val_if_fail (GTK_IS_CLIST (clist), NULL);
+
+  return clist->hadjustment;
+}
+
+void
+gtk_clist_set_vadjustment (GtkCList      *clist,
+                          GtkAdjustment *adjustment)
+{
+  g_return_if_fail (clist != NULL);
+  g_return_if_fail (GTK_IS_CLIST (clist));
+  if (adjustment)
+    g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
+  
+  if (clist->vadjustment && (clist->vadjustment != adjustment))
+    {
+      gtk_signal_disconnect_by_data (GTK_OBJECT (clist->vadjustment), clist);
+      gtk_object_unref (GTK_OBJECT (clist->vadjustment));
+    }
+
+  if (!adjustment)
+    adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,
+                                                    0.0, 0.0, 0.0));
+
+  if (clist->vadjustment != adjustment)
+    {
+      clist->vadjustment = adjustment;
+      gtk_object_ref (GTK_OBJECT (clist->vadjustment));
+      gtk_object_sink (GTK_OBJECT (clist->vadjustment));
+
+      gtk_signal_connect (GTK_OBJECT (clist->vadjustment), "changed",
+                         (GtkSignalFunc) vadjustment_changed,
+                         (gpointer) clist);
+      gtk_signal_connect (GTK_OBJECT (clist->vadjustment), "value_changed",
+                         (GtkSignalFunc) vadjustment_value_changed,
+                         (gpointer) clist);
+    }
+}
+
+GtkAdjustment *
+gtk_clist_get_vadjustment (GtkCList *clist)
+{
+  g_return_val_if_fail (clist != NULL, NULL);
+  g_return_val_if_fail (GTK_IS_CLIST (clist), NULL);
+
+  return clist->vadjustment;
+}
+
 void
 gtk_clist_set_shadow_type (GtkCList      *clist,
                           GtkShadowType  type)
@@ -991,22 +1139,6 @@ gtk_clist_set_policy (GtkCList      *clist,
 {
   g_return_if_fail (clist != NULL);
   g_return_if_fail (GTK_IS_CLIST (clist));
-
-  if (clist->vscrollbar_policy != vscrollbar_policy)
-    {
-      clist->vscrollbar_policy = vscrollbar_policy;
-
-      if (GTK_WIDGET (clist)->parent)
-       gtk_widget_queue_resize (GTK_WIDGET (clist));
-    }
-
-  if (clist->hscrollbar_policy != hscrollbar_policy)
-    {
-      clist->hscrollbar_policy = hscrollbar_policy;
-
-      if (GTK_WIDGET (clist)->parent)
-       gtk_widget_queue_resize (GTK_WIDGET (clist));
-    }
 }
 
 void
@@ -1026,7 +1158,7 @@ gtk_clist_thaw (GtkCList *clist)
 
   GTK_CLIST_UNSET_FLAG (clist, CLIST_FROZEN);
 
-  adjust_scrollbars (clist);
+  adjust_adjustments (clist);
   draw_rows (clist, NULL);
 }
 
@@ -1555,7 +1687,7 @@ real_resize_column (GtkCList *clist,
 
   if (!GTK_CLIST_FROZEN (clist))
     {
-      adjust_scrollbars (clist);
+      adjust_adjustments (clist);
       draw_rows (clist, NULL);
     }
 }
@@ -1802,7 +1934,7 @@ gtk_clist_set_row_height (GtkCList *clist,
       
   if (!GTK_CLIST_FROZEN (clist))
     {
-      adjust_scrollbars (clist);
+      adjust_adjustments (clist);
       draw_rows (clist, NULL);
     }
 }
@@ -1821,6 +1953,8 @@ gtk_clist_moveto (GtkCList *clist,
     return;
   if (column < -1 || column >= clist->columns)
     return;
+  if (!clist->hadjustment || !clist->vadjustment)
+    return;
 
   row_align = CLAMP (row_align, 0, 1);
   col_align = CLAMP (col_align, 0, 1);
@@ -1828,21 +1962,18 @@ gtk_clist_moveto (GtkCList *clist,
   /* adjust horizontal scrollbar */
   if (column >= 0)
     {
-      GtkAdjustment *adj;
       gint x;
 
-      adj = GTK_RANGE (clist->hscrollbar)->adjustment;
-
       x = (COLUMN_LEFT (clist, column) - CELL_SPACING - COLUMN_INSET -
           (col_align * (clist->clist_window_width - 2 * COLUMN_INSET -
                         CELL_SPACING - clist->column[column].area.width)));
       if (x < 0)
-       gtk_adjustment_set_value (adj, 0.0);
+       gtk_adjustment_set_value (clist->hadjustment, 0.0);
       else if (x > LIST_WIDTH (clist) - clist->clist_window_width)
        gtk_adjustment_set_value 
-         (adj, LIST_WIDTH (clist) - clist->clist_window_width);
+         (clist->hadjustment, LIST_WIDTH (clist) - clist->clist_window_width);
       else
-       gtk_adjustment_set_value (adj, x);
+       gtk_adjustment_set_value (clist->hadjustment, x);
     }
 
   /* adjust vertical scrollbar */
@@ -2394,7 +2525,7 @@ real_insert_row (GtkCList *clist,
   /* redraw the list if it isn't frozen */
   if (!GTK_CLIST_FROZEN (clist))
     {
-      adjust_scrollbars (clist);
+      adjust_adjustments (clist);
 
       if (gtk_clist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE)
        draw_rows (clist, NULL);
@@ -2460,7 +2591,7 @@ real_remove_row (GtkCList *clist,
   /* redraw the row if it isn't frozen */
   if (!GTK_CLIST_FROZEN (clist))
     {
-      adjust_scrollbars (clist);
+      adjust_adjustments (clist);
 
       if (was_visible)
        draw_rows (clist, NULL);
@@ -2508,11 +2639,9 @@ real_clear (GtkCList *clist)
       gtk_clist_set_column_width (clist, i, 0);
 
   /* zero-out the scrollbars */
-  if (clist->vscrollbar)
+  if (clist->vadjustment)
     {
-      GTK_RANGE (clist->vscrollbar)->adjustment->value = 0.0;
-      gtk_signal_emit_by_name
-       (GTK_OBJECT (GTK_RANGE (clist->vscrollbar)->adjustment), "changed");
+      gtk_adjustment_set_value (clist->vadjustment, 0.0);
       if (!GTK_CLIST_FROZEN (clist))
        gtk_clist_thaw (clist);
     }
@@ -3858,16 +3987,16 @@ gtk_clist_destroy (GtkObject *object)
    * to zero.
    */
 
-  /* destroy the scrollbars */
-  if (clist->vscrollbar)
+  /* unref adjustments */
+  if (clist->hadjustment)
     {
-      gtk_widget_unparent (clist->vscrollbar);
-      clist->vscrollbar = NULL;
+      gtk_object_unref (GTK_OBJECT (clist->hadjustment));
+      clist->hadjustment = NULL;
     }
-  if (clist->hscrollbar)
+  if (clist->vadjustment)
     {
-      gtk_widget_unparent (clist->hscrollbar);
-      clist->hscrollbar = NULL;
+      gtk_object_unref (GTK_OBJECT (clist->vadjustment));
+      clist->vadjustment = NULL;
     }
 
   if (clist->htimer)
@@ -3920,6 +4049,7 @@ gtk_clist_finalize (GtkObject *object)
  *   gtk_clist_draw
  *   gtk_clist_expose
  *   gtk_clist_style_set
+ *   gtk_clist_parent_set
  *   gtk_clist_key_press
  *   gtk_clist_button_press
  *   gtk_clist_button_release
@@ -4183,15 +4313,6 @@ gtk_clist_map (GtkWidget *widget)
        if (clist->column[i].window && clist->column[i].button)
          gdk_window_show (clist->column[i].window);
        
-      /* map vscrollbars */
-      if (GTK_WIDGET_VISIBLE (clist->vscrollbar) &&
-         !GTK_WIDGET_MAPPED (clist->vscrollbar))
-       gtk_widget_map (clist->vscrollbar);
-
-      if (GTK_WIDGET_VISIBLE (clist->hscrollbar) &&
-         !GTK_WIDGET_MAPPED (clist->hscrollbar))
-       gtk_widget_map (clist->hscrollbar);
-
       /* unfreeze the list */
       GTK_CLIST_UNSET_FLAG (clist, CLIST_FROZEN);
     }
@@ -4220,13 +4341,6 @@ gtk_clist_unmap (GtkWidget *widget)
       gdk_window_hide (clist->title_window);
       gdk_window_hide (widget->window);
 
-      /* unmap scrollbars */
-      if (GTK_WIDGET_MAPPED (clist->vscrollbar))
-       gtk_widget_unmap (clist->vscrollbar);
-
-      if (GTK_WIDGET_MAPPED (clist->hscrollbar))
-       gtk_widget_unmap (clist->hscrollbar);
-
       /* unmap column buttons */
       for (i = 0; i < clist->columns; i++)
        if (clist->column[i].button &&
@@ -4361,6 +4475,24 @@ gtk_clist_style_set (GtkWidget *widget,
     }
 }
 
+static void
+gtk_clist_parent_set (GtkWidget *widget,
+                     GtkWidget *previous_parent)
+{
+  GtkCList *clist;
+
+  g_return_if_fail (widget != NULL);
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  clist = GTK_CLIST (widget);
+
+ /* create adjustments */
+  if (!clist->hadjustment)
+    gtk_clist_set_hadjustment (clist, NULL);
+  if (!clist->vadjustment)
+    gtk_clist_set_vadjustment (clist, NULL);
+}
+
 static gint
 gtk_clist_key_press (GtkWidget   *widget,
                     GdkEventKey *event)
@@ -4718,40 +4850,27 @@ move_vertical (GtkCList *clist,
               gint      row,
               gfloat    align)
 {
-  gint y;
-  GtkAdjustment *adj;
+  gfloat value;
 
-  adj = GTK_RANGE (clist->vscrollbar)->adjustment;
+  value = (ROW_TOP_YPIXEL (clist, row) - clist->voffset -
+          align * (clist->clist_window_height - clist->row_height) +
+          (2 * align - 1) * CELL_SPACING);
 
-  y = ROW_TOP_YPIXEL (clist, row) - clist->voffset;
-  
-  y = y - align * (clist->clist_window_height - clist->row_height)
-    + (2 * align - 1) * CELL_SPACING;
-  
-  if (y + adj->page_size > adj->upper)
-    adj->value = adj->upper - adj->page_size;
-  else
-    adj->value = y;
+  if (value + clist->vadjustment->page_size > clist->vadjustment->upper)
+    value = clist->vadjustment->upper - clist->vadjustment->page_size;
 
-  gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed");
+  gtk_adjustment_set_value(clist->vadjustment, value);
 }
 
 static void
 move_horizontal (GtkCList *clist,
                 gint      diff)
 {
-  gfloat upper;
-  GtkAdjustment *adj;
-
-  adj = GTK_RANGE (clist->hscrollbar)->adjustment;
+  gfloat value;
 
-  adj->value += diff;
-
-  upper = adj->upper - adj->page_size;
-  adj->value = MIN (adj->value, upper);
-  adj->value = MAX (adj->value, 0.0);
-
-  gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed");
+  value = CLAMP (clist->hadjustment->value + diff, 0.0,
+                clist->hadjustment->upper - clist->hadjustment->page_size);
+  gtk_adjustment_set_value(clist->hadjustment, value);
 }
 
 static gint
@@ -4824,9 +4943,9 @@ gtk_clist_motion (GtkWidget      *widget,
       clist->htimer = gtk_timeout_add
        (SCROLL_TIME, (GtkFunction) horizontal_timeout, clist);
 
-      if (!((x < 0 && GTK_RANGE (clist->hscrollbar)->adjustment->value == 0) ||
+      if (!((x < 0 && clist->hadjustment->value == 0) ||
            (x >= clist->clist_window_width &&
-            GTK_RANGE (clist->hscrollbar)->adjustment->value ==
+            clist->hadjustment->value ==
             LIST_WIDTH (clist) - clist->clist_window_width)))
        {
          if (x < 0)
@@ -4927,40 +5046,12 @@ gtk_clist_size_request (GtkWidget      *widget,
            MAX (clist->column_title_area.height,
                 clist->column[i].button->requisition.height);
        }
-  requisition->height += clist->column_title_area.height;
-
-  /* add the vscrollbar space */
-  if ((clist->vscrollbar_policy == GTK_POLICY_AUTOMATIC) ||
-      GTK_WIDGET_VISIBLE (clist->vscrollbar))
-    {
-      gtk_widget_size_request (clist->vscrollbar,
-                              &clist->vscrollbar->requisition);
-
-      requisition->width += (clist->vscrollbar->requisition.width +
-                            SCROLLBAR_SPACING (clist));
-      requisition->height = MAX (requisition->height,
-                                clist->vscrollbar->requisition.height);
-    }
-
-  /* add the hscrollbar space */
-  if ((clist->hscrollbar_policy == GTK_POLICY_AUTOMATIC) ||
-      GTK_WIDGET_VISIBLE (clist->hscrollbar))
-    {
-      gtk_widget_size_request (clist->hscrollbar,
-                              &clist->hscrollbar->requisition);
-
-      requisition->height += (clist->hscrollbar->requisition.height +
-                             SCROLLBAR_SPACING (clist));
-      requisition->width = MAX (clist->hscrollbar->requisition.width, 
-                               requisition->width - 
-                               clist->vscrollbar->requisition.width);
-
-    }
 
   requisition->width += (widget->style->klass->xthickness +
                         GTK_CONTAINER (widget)->border_width) * 2;
-  requisition->height += (widget->style->klass->ythickness +
-                         GTK_CONTAINER (widget)->border_width) * 2;
+  requisition->height += (clist->column_title_area.height +
+                         (widget->style->klass->ythickness +
+                          GTK_CONTAINER (widget)->border_width) * 2);
 }
 
 static void
@@ -4969,8 +5060,6 @@ gtk_clist_size_allocate (GtkWidget     *widget,
 {
   GtkCList *clist;
   GtkAllocation clist_allocation;
-  GtkAllocation child_allocation;
-  gint i, vscrollbar_vis, hscrollbar_vis;
   gint border_width;
 
   g_return_if_fail (widget != NULL);
@@ -5012,41 +5101,6 @@ gtk_clist_size_allocate (GtkWidget     *widget,
                                 (2 * widget->style->klass->ythickness) -
                                 clist->column_title_area.height);
   
-  /* 
-   * here's where we decide to show/not show the scrollbars
-   */
-  vscrollbar_vis = 0;
-  hscrollbar_vis = 0;
-  
-  for (i = 0; i <= 1; i++)
-    {
-      if (LIST_HEIGHT (clist) <= clist_allocation.height &&
-         clist->vscrollbar_policy == GTK_POLICY_AUTOMATIC)
-       {
-         vscrollbar_vis = 0;
-       }
-      else if (!vscrollbar_vis)
-       {
-         vscrollbar_vis = 1;
-         clist_allocation.width = MAX (1, clist_allocation.width - 
-                                       (clist->vscrollbar->requisition.width +
-                                        SCROLLBAR_SPACING (clist)));
-       }  
-      
-      if (LIST_WIDTH (clist) <= clist_allocation.width &&
-         clist->hscrollbar_policy == GTK_POLICY_AUTOMATIC)
-       {
-         hscrollbar_vis = 0;
-       }
-      else if (!hscrollbar_vis)
-       {
-         hscrollbar_vis = 1;
-         clist_allocation.height = MAX (1, clist_allocation.height - 
-                                        (clist->hscrollbar->requisition.height
-                                         + SCROLLBAR_SPACING (clist)));
-       }  
-    }
-  
   clist->clist_window_width = clist_allocation.width;
   clist->clist_window_height = clist_allocation.height;
   
@@ -5077,56 +5131,7 @@ gtk_clist_size_allocate (GtkWidget     *widget,
   size_allocate_columns (clist);
   size_allocate_title_buttons (clist);
 
-  adjust_scrollbars (clist);
-  
-  /* allocate the vscrollbar */
-  if (vscrollbar_vis)
-    {
-      if (!GTK_WIDGET_VISIBLE (clist->vscrollbar))
-       gtk_widget_show (clist->vscrollbar);
-      
-      child_allocation.x = (clist->internal_allocation.x + 
-                           clist->internal_allocation.width -
-                           clist->vscrollbar->requisition.width);
-      child_allocation.y = clist->internal_allocation.y;
-      child_allocation.width = clist->vscrollbar->requisition.width;
-      child_allocation.height = MAX (1, clist->internal_allocation.height -
-                                    (hscrollbar_vis ?
-                                     (clist->hscrollbar->requisition.height +
-                                      SCROLLBAR_SPACING (clist)) : 0));
-      gtk_widget_size_allocate (clist->vscrollbar, &child_allocation);
-    }
-  else
-    {
-      if (GTK_WIDGET_VISIBLE (clist->vscrollbar))
-       gtk_widget_hide (clist->vscrollbar);
-    }
-  
-  if (hscrollbar_vis)
-    {
-      if (!GTK_WIDGET_VISIBLE (clist->hscrollbar))
-       gtk_widget_show (clist->hscrollbar);
-      
-      child_allocation.x = clist->internal_allocation.x;
-      child_allocation.y = (clist->internal_allocation.y +
-                           clist->internal_allocation.height -
-                           clist->hscrollbar->requisition.height);
-      child_allocation.width = MAX (1, clist->internal_allocation.width -
-                                   (vscrollbar_vis ?
-                                    (clist->vscrollbar->requisition.width +
-                                     SCROLLBAR_SPACING (clist)) : 0));
-      child_allocation.height = clist->hscrollbar->requisition.height;
-      
-      gtk_widget_size_allocate (clist->hscrollbar, &child_allocation);
-    }
-  else
-    {
-      if (GTK_WIDGET_VISIBLE (clist->hscrollbar))
-       gtk_widget_hide (clist->hscrollbar);
-    }
-
-  /* set the vscrollbar adjustments */
-  adjust_scrollbars (clist);
+  adjust_adjustments (clist);
 }
 
 /* GTKCONTAINER
@@ -5139,28 +5144,21 @@ gtk_clist_forall (GtkContainer *container,
                  gpointer      callback_data)
 {
   GtkCList *clist;
+  guint i;
 
   g_return_if_fail (container != NULL);
   g_return_if_fail (GTK_IS_CLIST (container));
   g_return_if_fail (callback != NULL);
 
+  if (!include_internals)
+    return;
+
   clist = GTK_CLIST (container);
       
-  if (include_internals)
-    {
-      guint i;
-      
-      /* callback for the column buttons */
-      for (i = 0; i < clist->columns; i++)
-       if (clist->column[i].button)
-         (*callback) (clist->column[i].button, callback_data);
-      
-      /* callbacks for the scrollbars */
-      if (clist->vscrollbar)
-       (*callback) (clist->vscrollbar, callback_data);
-      if (clist->hscrollbar)
-       (*callback) (clist->hscrollbar, callback_data);
-    }
+  /* callback for the column buttons */
+  for (i = 0; i < clist->columns; i++)
+    if (clist->column[i].button)
+      (*callback) (clist->column[i].button, callback_data);
 }
 
 /* PRIVATE DRAWING FUNCTIONS
@@ -5646,8 +5644,7 @@ gtk_clist_get_selection_info (GtkCList *clist,
  * SCROLLBARS
  *
  * functions:
- *   create_scrollbars
- *   adjust_scrollbars
+ *   adjust_adjustments
  *   vadjustment_changed
  *   hadjustment_changed
  *   vadjustment_value_changed
@@ -5655,119 +5652,41 @@ gtk_clist_get_selection_info (GtkCList *clist,
  *   check_exposures
  */
 static void
-create_scrollbars (GtkCList *clist)
-{
-  GtkAdjustment *adjustment;
-
-  clist->vscrollbar = gtk_vscrollbar_new (NULL);
-
-  adjustment = gtk_range_get_adjustment (GTK_RANGE (clist->vscrollbar));
-
-  gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
-                     (GtkSignalFunc) vadjustment_changed,
-                     (gpointer) clist);
-
-  gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
-                     (GtkSignalFunc) vadjustment_value_changed,
-                     (gpointer) clist);
-
-  gtk_widget_set_parent (clist->vscrollbar, GTK_WIDGET (clist));
-  gtk_widget_show (clist->vscrollbar);
-
-  clist->hscrollbar = gtk_hscrollbar_new (NULL);
-
-  adjustment = gtk_range_get_adjustment (GTK_RANGE (clist->hscrollbar));
-
-  gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
-                     (GtkSignalFunc) hadjustment_changed,
-                     (gpointer) clist);
-
-  gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
-                     (GtkSignalFunc) hadjustment_value_changed,
-                     (gpointer) clist);
-
-  gtk_widget_set_parent (clist->hscrollbar, GTK_WIDGET (clist));
-  gtk_widget_show (clist->hscrollbar);
-}
-
-static void
-adjust_scrollbars (GtkCList * clist)
+adjust_adjustments (GtkCList * clist)
 {
-  GtkRange *vscrollbar;
-  GtkRange *hscrollbar;
+  if (!clist->hadjustment || !clist->vadjustment)
+    return;
 
-  vscrollbar = GTK_RANGE (clist->vscrollbar);
-  vscrollbar->adjustment->page_size = clist->clist_window_height;
-  vscrollbar->adjustment->page_increment = clist->clist_window_height / 2;
-  vscrollbar->adjustment->step_increment = 10;
-  vscrollbar->adjustment->lower = 0;
-  vscrollbar->adjustment->upper = LIST_HEIGHT (clist);
+  clist->vadjustment->page_size = clist->clist_window_height;
+  clist->vadjustment->page_increment = clist->clist_window_height / 2;
+  clist->vadjustment->step_increment = 10;
+  clist->vadjustment->lower = 0;
+  clist->vadjustment->upper = LIST_HEIGHT (clist);
 
   if (clist->clist_window_height - clist->voffset > LIST_HEIGHT (clist))
     {
-      vscrollbar->adjustment->value = MAX (0, LIST_HEIGHT (clist) - 
-                                          clist->clist_window_height);
-      gtk_signal_emit_by_name (GTK_OBJECT (vscrollbar->adjustment), 
+      clist->vadjustment->value = MAX (0, (LIST_HEIGHT (clist) -
+                                          clist->clist_window_height));
+      gtk_signal_emit_by_name (GTK_OBJECT (clist->vadjustment),
                               "value_changed");
     }
 
-  hscrollbar = GTK_RANGE (clist->hscrollbar);
-  hscrollbar->adjustment->page_size = clist->clist_window_width;
-  hscrollbar->adjustment->page_increment = clist->clist_window_width / 2;
-  hscrollbar->adjustment->step_increment = 10;
-  hscrollbar->adjustment->lower = 0;
-  hscrollbar->adjustment->upper = LIST_WIDTH (clist);
+  clist->hadjustment->page_size = clist->clist_window_width;
+  clist->hadjustment->page_increment = clist->clist_window_width / 2;
+  clist->hadjustment->step_increment = 10;
+  clist->hadjustment->lower = 0;
+  clist->hadjustment->upper = LIST_WIDTH (clist);
 
   if (clist->clist_window_width - clist->hoffset > LIST_WIDTH (clist))
     {
-      hscrollbar->adjustment->value = MAX (0, LIST_WIDTH (clist) - 
-                                          clist->clist_window_width);
-      gtk_signal_emit_by_name (GTK_OBJECT (hscrollbar->adjustment), 
+      clist->hadjustment->value = MAX (0, (LIST_WIDTH (clist) -
+                                          clist->clist_window_width));
+      gtk_signal_emit_by_name (GTK_OBJECT (clist->hadjustment),
                               "value_changed");
     }
 
-  if (LIST_HEIGHT (clist) <= clist->clist_window_height &&
-      clist->vscrollbar_policy == GTK_POLICY_AUTOMATIC)
-    {
-      if (GTK_WIDGET_VISIBLE (clist->vscrollbar))
-       {
-         gtk_widget_hide (clist->vscrollbar);
-         gtk_widget_size_allocate (GTK_WIDGET (clist),
-                                   &GTK_WIDGET (clist)->allocation);
-       }
-    }
-  else
-    {
-      if (!GTK_WIDGET_VISIBLE (clist->vscrollbar))
-       {
-         gtk_widget_show (clist->vscrollbar);
-         gtk_widget_size_allocate (GTK_WIDGET (clist),
-                                   &GTK_WIDGET (clist)->allocation);
-       }
-    }
-
-  if (LIST_WIDTH (clist) <= clist->clist_window_width &&
-      clist->hscrollbar_policy == GTK_POLICY_AUTOMATIC)
-    {
-      if (GTK_WIDGET_VISIBLE (clist->hscrollbar))
-       {
-         gtk_widget_hide (clist->hscrollbar);
-         gtk_widget_size_allocate (GTK_WIDGET (clist),
-                                   &GTK_WIDGET (clist)->allocation);
-       }
-    }
-  else
-    {
-      if (!GTK_WIDGET_VISIBLE (clist->hscrollbar))
-       {
-         gtk_widget_show (clist->hscrollbar);
-         gtk_widget_size_allocate (GTK_WIDGET (clist),
-                                   &GTK_WIDGET (clist)->allocation);
-       }
-    }
-
-  gtk_signal_emit_by_name (GTK_OBJECT (vscrollbar->adjustment), "changed");
-  gtk_signal_emit_by_name (GTK_OBJECT (hscrollbar->adjustment), "changed");
+  gtk_signal_emit_by_name (GTK_OBJECT (clist->vadjustment), "changed");
+  gtk_signal_emit_by_name (GTK_OBJECT (clist->hadjustment), "changed");
 }
 
 static void
@@ -5808,76 +5727,64 @@ vadjustment_value_changed (GtkAdjustment *adjustment,
 
   clist = GTK_CLIST (data);
 
-  if (!GTK_WIDGET_DRAWABLE (clist))
+  if (!GTK_WIDGET_DRAWABLE (clist) || adjustment != clist->vadjustment)
     return;
 
   value = adjustment->value;
 
-  if (adjustment == gtk_range_get_adjustment (GTK_RANGE (clist->vscrollbar)))
+  if (value > -clist->voffset)
     {
-      if (value > -clist->voffset)
-       {
-         /* scroll down */
-         diff = value + clist->voffset;
-
-         /* we have to re-draw the whole screen here... */
-         if (diff >= clist->clist_window_height)
-           {
-             clist->voffset = -value;
-             draw_rows (clist, NULL);
-             return;
-           }
+      /* scroll down */
+      diff = value + clist->voffset;
 
-         if ((diff != 0) && (diff != clist->clist_window_height))
-           gdk_window_copy_area (clist->clist_window,
-                                 clist->fg_gc,
-                                 0, 0,
-                                 clist->clist_window,
-                                 0,
-                                 diff,
-                                 clist->clist_window_width,
-                                 clist->clist_window_height - diff);
-
-         area.x = 0;
-         area.y = clist->clist_window_height - diff;
-         area.width = clist->clist_window_width;
-         area.height = diff;
-       }
-      else
+      /* we have to re-draw the whole screen here... */
+      if (diff >= clist->clist_window_height)
        {
-         /* scroll up */
-         diff = -clist->voffset - value;
+         clist->voffset = -value;
+         draw_rows (clist, NULL);
+         return;
+       }
 
-         /* we have to re-draw the whole screen here... */
-         if (diff >= clist->clist_window_height)
-           {
-             clist->voffset = -value;
-             draw_rows (clist, NULL);
-             return;
-           }
+      if ((diff != 0) && (diff != clist->clist_window_height))
+       gdk_window_copy_area (clist->clist_window, clist->fg_gc,
+                             0, 0, clist->clist_window, 0, diff,
+                             clist->clist_window_width,
+                             clist->clist_window_height - diff);
 
-         if ((diff != 0) && (diff != clist->clist_window_height))
-           gdk_window_copy_area (clist->clist_window,
-                                 clist->fg_gc,
-                                 0, diff,
-                                 clist->clist_window,
-                                 0,
-                                 0,
-                                 clist->clist_window_width,
-                                 clist->clist_window_height - diff);
-
-         area.x = 0;
-         area.y = 0;
-         area.width = clist->clist_window_width;
-         area.height = diff;
+      area.x = 0;
+      area.y = clist->clist_window_height - diff;
+      area.width = clist->clist_window_width;
+      area.height = diff;
+    }
+  else
+    {
+      /* scroll up */
+      diff = -clist->voffset - value;
 
+      /* we have to re-draw the whole screen here... */
+      if (diff >= clist->clist_window_height)
+       {
+         clist->voffset = -value;
+         draw_rows (clist, NULL);
+         return;
        }
 
-      clist->voffset = -value;
       if ((diff != 0) && (diff != clist->clist_window_height))
-       check_exposures (clist);
+       gdk_window_copy_area (clist->clist_window, clist->fg_gc,
+                             0, diff, clist->clist_window, 0, 0,
+                             clist->clist_window_width,
+                             clist->clist_window_height - diff);
+
+      area.x = 0;
+      area.y = 0;
+      area.width = clist->clist_window_width;
+      area.height = diff;
     }
 
+  clist->voffset = -value;
+  if ((diff != 0) && (diff != clist->clist_window_height))
+    check_exposures (clist);
+
   draw_rows (clist, &area);
 }
 
@@ -5898,12 +5805,11 @@ hadjustment_value_changed (GtkAdjustment *adjustment,
 
   clist = GTK_CLIST (data);
 
-  if (!GTK_WIDGET_DRAWABLE (clist) ||
-      adjustment != gtk_range_get_adjustment (GTK_RANGE (clist->hscrollbar)))
+  if (!GTK_WIDGET_DRAWABLE (clist) || adjustment != clist->hadjustment)
     return;
 
   value = adjustment->value;
-  
+
   /* move the column buttons and resize windows */
   for (i = 0; i < clist->columns; i++)
     {
@@ -6221,9 +6127,7 @@ gtk_clist_focus (GtkContainer     *container,
     {
     case GTK_DIR_LEFT:
     case GTK_DIR_RIGHT:
-      if (GTK_CLIST_CHILD_HAS_FOCUS (clist) &&
-         (!focus_child || (focus_child && focus_child != clist->vscrollbar && 
-                           focus_child != clist->hscrollbar)))
+      if (GTK_CLIST_CHILD_HAS_FOCUS (clist))
        {
          if (title_focus (clist, direction))
            return TRUE;
@@ -6234,9 +6138,7 @@ gtk_clist_focus (GtkContainer     *container,
       return TRUE;
     case GTK_DIR_DOWN:
     case GTK_DIR_TAB_FORWARD:
-      if (GTK_CLIST_CHILD_HAS_FOCUS (clist) && 
-         (!focus_child || (focus_child != clist->vscrollbar &&
-                           focus_child != clist->hscrollbar))) 
+      if (GTK_CLIST_CHILD_HAS_FOCUS (clist))
        {
          gboolean tf = FALSE;
 
@@ -6264,47 +6166,10 @@ gtk_clist_focus (GtkContainer     *container,
        }
       
       GTK_CLIST_SET_FLAG (clist, CLIST_CHILD_HAS_FOCUS);
-
-      if ((!GTK_CLIST_CHILD_HAS_FOCUS (clist) || !focus_child ||
-          (focus_child != clist->vscrollbar &&
-           focus_child != clist->hscrollbar)) &&
-         GTK_WIDGET_VISIBLE (clist->vscrollbar) &&
-         GTK_WIDGET_CAN_FOCUS (clist->vscrollbar))
-       {
-         gtk_widget_grab_focus (clist->vscrollbar);
-         return TRUE;
-       }
-
-      if ((!GTK_CLIST_CHILD_HAS_FOCUS (clist) || !focus_child || 
-          focus_child != clist->hscrollbar) &&
-         GTK_WIDGET_VISIBLE (clist->hscrollbar) &&
-         GTK_WIDGET_CAN_FOCUS (clist->hscrollbar))
-       {
-         gtk_widget_grab_focus (clist->hscrollbar);
-         return TRUE;
-       }
       break;
     case GTK_DIR_UP:
     case GTK_DIR_TAB_BACKWARD:
-      if (!focus_child && GTK_CLIST_CHILD_HAS_FOCUS (clist) &&
-         GTK_WIDGET_VISIBLE (clist->hscrollbar) &&
-         GTK_WIDGET_CAN_FOCUS (clist->hscrollbar))
-       {
-         gtk_widget_grab_focus (clist->hscrollbar);
-         return TRUE;
-       }
-       
-      if ((!focus_child || focus_child == clist->hscrollbar) &&
-         GTK_CLIST_CHILD_HAS_FOCUS (clist) &&
-         GTK_WIDGET_VISIBLE (clist->vscrollbar) &&
-         GTK_WIDGET_CAN_FOCUS (clist->vscrollbar))
-       {
-         gtk_widget_grab_focus (clist->vscrollbar);
-         return TRUE;
-       }
-
-      if ((!focus_child || focus_child == clist->hscrollbar ||
-          focus_child == clist->vscrollbar) &&
+      if (!focus_child &&
          GTK_CLIST_CHILD_HAS_FOCUS (clist) && clist->rows)
        {
          if (clist->focus_row < 0)
@@ -6443,9 +6308,7 @@ title_focus (GtkCList *clist,
     {
     case GTK_DIR_TAB_BACKWARD:
     case GTK_DIR_UP:
-      if (!focus_child || focus_child == clist->hscrollbar ||
-         focus_child == clist->hscrollbar ||
-         !GTK_CLIST_CHILD_HAS_FOCUS (clist))
+      if (!focus_child || !GTK_CLIST_CHILD_HAS_FOCUS (clist))
        {
          if (dir == GTK_DIR_UP)
            i = COLUMN_FROM_XPIXEL (clist, 0);
@@ -6459,16 +6322,14 @@ title_focus (GtkCList *clist,
       break;
     case GTK_DIR_LEFT:
       d = -1;
-      if (!focus_child || focus_child == clist->hscrollbar ||
-         focus_child == clist->hscrollbar)
+      if (!focus_child)
        {
          i = clist->columns - 1;
          focus_child = clist->column[i].button;
        }
       break;
     case GTK_DIR_RIGHT:
-      if (!focus_child || focus_child == clist->hscrollbar ||
-         focus_child == clist->hscrollbar)
+      if (!focus_child)
        {
          i = 0;
          focus_child = clist->column[i].button;
@@ -6631,8 +6492,9 @@ scroll_horizontal (GtkCList      *clist,
       column =  COLUMN_FROM_XPIXEL (clist, clist->clist_window_width);
       if (column < 0)
        return;
-      if (COLUMN_LEFT_XPIXEL (clist, column) + clist->column[column].area.width
-         + CELL_SPACING + COLUMN_INSET - 1 <= clist->clist_window_width &&
+      if (COLUMN_LEFT_XPIXEL (clist, column) +
+         clist->column[column].area.width +
+         CELL_SPACING + COLUMN_INSET - 1 <= clist->clist_window_width &&
          column < clist->columns - 1)
        column++;
       break;
index bbc23c762d0f3770a19a9e30e7c12c0c73c400f4..3f20066a128647b2674105c9df486450a093d772 100644 (file)
@@ -156,10 +156,8 @@ struct _GtkCList
   gint undo_anchor;
   
   /* scrollbars */
-  GtkWidget *vscrollbar;
-  GtkWidget *hscrollbar;
-  guint8 vscrollbar_policy;
-  guint8 hscrollbar_policy;
+  GtkAdjustment *hadjustment;
+  GtkAdjustment *vadjustment;
   
   /* xor GC for the vertical drag line */
   GdkGC *xor_gc;
@@ -384,13 +382,19 @@ void gtk_clist_construct (GtkCList *clist,
                          gchar    *titles[]);
 
 /* create a new GtkCList */
-GtkWidget *gtk_clist_new             (gint   columns);
-GtkWidget *gtk_clist_new_with_titles (gint   columns,
+GtkWidgetgtk_clist_new             (gint   columns);
+GtkWidgetgtk_clist_new_with_titles (gint   columns,
                                      gchar *titles[]);
 
-/* deprecated function, use gtk_clist_set_shadow_type instead. */
-void gtk_clist_set_border (GtkCList      *clist,
-                          GtkShadowType  border);
+/* set adjustments of clist */
+void gtk_clist_set_hadjustment (GtkCList      *clist,
+                               GtkAdjustment *adjustment);
+void gtk_clist_set_vadjustment (GtkCList      *clist,
+                               GtkAdjustment *adjustment);
+
+/* get adjustments of clist */
+GtkAdjustment* gtk_clist_get_hadjustment (GtkCList *clist);
+GtkAdjustment* gtk_clist_get_vadjustment (GtkCList *clist);
 
 /* set the border style of the clist */
 void gtk_clist_set_shadow_type (GtkCList      *clist,
@@ -400,14 +404,6 @@ void gtk_clist_set_shadow_type (GtkCList      *clist,
 void gtk_clist_set_selection_mode (GtkCList         *clist,
                                   GtkSelectionMode  mode);
 
-/* set policy on the scrollbar, to either show them all the time
- * or show them only when they are needed, ie., when there is more
- * than one page of information
- */
-void gtk_clist_set_policy (GtkCList      *clist,
-                          GtkPolicyType  vscrollbar_policy,
-                          GtkPolicyType  hscrollbar_policy);
-
 /* freeze all visual updates of the list, and then thaw the list after
  * you have made a number of changes and the updates wil occure in a
  * more efficent mannor than if you made them on a unfrozen list
@@ -696,6 +692,17 @@ void gtk_clist_sort (GtkCList *clist);
 void gtk_clist_set_auto_sort (GtkCList *clist,
                              gboolean  auto_sort);
 
+
+/* Deprecated methods */
+
+/* Use gtk_clist_set_shadow_type instead. */
+void gtk_clist_set_border (GtkCList      *clist,
+                          GtkShadowType  border);
+
+/* Completely non-functional */
+void gtk_clist_set_policy (GtkCList      *clist,
+                          GtkPolicyType  vscrollbar_policy,
+                          GtkPolicyType  hscrollbar_policy);
 #ifdef __cplusplus
 }
 #endif                         /* __cplusplus */
index c9efc1b31733c4565bcde450ab69eba2c39a8c06..90a5784617919463b679534f7657e07066d6c3e1 100644 (file)
@@ -367,6 +367,8 @@ gtk_file_selection_init (GtkFileSelection *filesel)
   GtkWidget *list_hbox;
   GtkWidget *confirm_area;
   GtkWidget *pulldown_hbox;
+  GtkWidget *scrolled_win;
+
   char *dir_title [] = { "Directories", };
   char *file_title [] = { "Files", };
   
@@ -410,11 +412,16 @@ gtk_file_selection_init (GtkFileSelection *filesel)
   gtk_signal_connect (GTK_OBJECT (filesel->dir_list), "select_row",
                      (GtkSignalFunc) gtk_file_selection_dir_button, 
                      (gpointer) filesel);
-  gtk_clist_set_policy (GTK_CLIST (filesel->dir_list), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC);
   gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list));
-  gtk_container_border_width (GTK_CONTAINER (filesel->dir_list), 5);
-  gtk_box_pack_start (GTK_BOX (list_hbox), filesel->dir_list, TRUE, TRUE, 0);
+
+  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->dir_list);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+  gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
+  gtk_box_pack_start (GTK_BOX (list_hbox), scrolled_win, TRUE, TRUE, 0);
   gtk_widget_show (filesel->dir_list);
+  gtk_widget_show (scrolled_win);
 
   /* The files clist */
   filesel->file_list = gtk_clist_new_with_titles (1, file_title);
@@ -422,11 +429,16 @@ gtk_file_selection_init (GtkFileSelection *filesel)
   gtk_signal_connect (GTK_OBJECT (filesel->file_list), "select_row",
                      (GtkSignalFunc) gtk_file_selection_file_button, 
                      (gpointer) filesel);
-  gtk_clist_set_policy (GTK_CLIST (filesel->file_list), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC);
   gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list));
-  gtk_container_border_width (GTK_CONTAINER (filesel->file_list), 5);
-  gtk_box_pack_start (GTK_BOX (list_hbox), filesel->file_list, TRUE, TRUE, 0);
+
+  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+  gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
+  gtk_box_pack_start (GTK_BOX (list_hbox), scrolled_win, TRUE, TRUE, 0);
   gtk_widget_show (filesel->file_list);
+  gtk_widget_show (scrolled_win);
 
   /* action area for packing buttons into. */
   filesel->action_area = gtk_hbox_new (TRUE, 0);
index 600b8e88507620f04082bc673a3288927c164ecd..7c664306e5735ed54222fe738ab1964598e36801 100644 (file)
@@ -81,6 +81,7 @@
 #include "gtksignal.h"
 #include "gtktable.h"
 #include "gtkvbox.h"
+#include "gtkscrolledwindow.h"
 
 /* The maximum number of fontnames requested with XListFonts(). */
 #define MAX_FONTS 32767
@@ -431,6 +432,7 @@ gtk_font_selection_class_init(GtkFontSelectionClass *klass)
 static void
 gtk_font_selection_init(GtkFontSelection *fontsel)
 {
+  GtkWidget *scrolled_win;
   GtkWidget *text_frame;
   GtkWidget *text_box, *frame;
   GtkWidget *table, *label, *hbox, *hbox2, *clist, *button, *vbox, *alignment;
@@ -524,33 +526,43 @@ gtk_font_selection_init(GtkFontSelection *fontsel)
   fontsel->font_clist = gtk_clist_new(1);
   gtk_clist_column_titles_hide (GTK_CLIST(fontsel->font_clist));
   gtk_clist_set_column_width (GTK_CLIST(fontsel->font_clist), 0, 300);
-  gtk_clist_set_policy(GTK_CLIST(fontsel->font_clist), GTK_POLICY_ALWAYS,
-                      GTK_POLICY_AUTOMATIC);
   gtk_widget_set_usize (fontsel->font_clist, FONT_LIST_WIDTH,
                        FONT_LIST_HEIGHT);
+  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->font_clist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
   gtk_widget_show(fontsel->font_clist);
-  gtk_table_attach (GTK_TABLE (table), fontsel->font_clist, 0, 1, 2, 3,
+  gtk_widget_show(scrolled_win);
+
+  gtk_table_attach (GTK_TABLE (table), scrolled_win, 0, 1, 2, 3,
                    GTK_EXPAND | GTK_FILL,
                    GTK_EXPAND | GTK_FILL, 0, 0);
   
   fontsel->font_style_clist = gtk_clist_new(1);
   gtk_clist_column_titles_hide (GTK_CLIST(fontsel->font_style_clist));
   gtk_clist_set_column_width (GTK_CLIST(fontsel->font_style_clist), 0, 300);
-  gtk_clist_set_policy(GTK_CLIST(fontsel->font_style_clist), GTK_POLICY_ALWAYS,
-                      GTK_POLICY_AUTOMATIC);
   gtk_widget_set_usize (fontsel->font_style_clist, FONT_STYLE_LIST_WIDTH, -1);
+  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->font_style_clist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
   gtk_widget_show(fontsel->font_style_clist);
-  gtk_table_attach (GTK_TABLE (table), fontsel->font_style_clist, 1, 2, 2, 3,
+  gtk_widget_show(scrolled_win);
+  gtk_table_attach (GTK_TABLE (table), scrolled_win, 1, 2, 2, 3,
                    GTK_EXPAND | GTK_FILL,
                    GTK_EXPAND | GTK_FILL, 0, 0);
   
   fontsel->size_clist = gtk_clist_new(1);
   gtk_clist_column_titles_hide (GTK_CLIST(fontsel->size_clist));
-  gtk_clist_set_policy(GTK_CLIST(fontsel->size_clist), GTK_POLICY_ALWAYS,
-                      GTK_POLICY_AUTOMATIC);
   gtk_widget_set_usize (fontsel->size_clist, FONT_SIZE_LIST_WIDTH, -1);
+  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->size_clist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
   gtk_widget_show(fontsel->size_clist);
-  gtk_table_attach (GTK_TABLE (table), fontsel->size_clist, 2, 3, 2, 3,
+  gtk_widget_show(scrolled_win);
+  gtk_table_attach (GTK_TABLE (table), scrolled_win, 2, 3, 2, 3,
                    GTK_FILL, GTK_FILL, 0, 0);
   
   
@@ -683,16 +695,19 @@ gtk_font_selection_init(GtkFontSelection *fontsel)
   gtk_notebook_append_page (GTK_NOTEBOOK (fontsel),
                            fontsel->info_vbox, label);
   
-  fontsel->info_clist = gtk_clist_new_with_titles(3, titles);
+  fontsel->info_clist = gtk_clist_new_with_titles (3, titles);
   gtk_widget_set_usize (fontsel->info_clist, 390, 150);
   gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 0, 130);
   gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 1, 130);
   gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 2, 130);
   gtk_clist_column_titles_passive(GTK_CLIST(fontsel->info_clist));
-  gtk_clist_set_policy(GTK_CLIST(fontsel->info_clist), GTK_POLICY_AUTOMATIC,
-                      GTK_POLICY_AUTOMATIC);
+  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->info_clist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
   gtk_widget_show(fontsel->info_clist);
-  gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), fontsel->info_clist,
+  gtk_widget_show(scrolled_win);
+  gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), scrolled_win,
                      TRUE, TRUE, 0);
   
   /* Insert the property names */
@@ -806,9 +821,13 @@ gtk_font_selection_init(GtkFontSelection *fontsel)
       gtk_widget_set_usize (clist, 100, filter_heights[prop]);
       gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_MULTIPLE);
       gtk_clist_column_titles_hide(GTK_CLIST(clist));
-      gtk_clist_set_policy(GTK_CLIST(clist), GTK_POLICY_AUTOMATIC,
-                          GTK_POLICY_AUTOMATIC);
+      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+      gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                     GTK_POLICY_AUTOMATIC,
+                                     GTK_POLICY_AUTOMATIC);
       gtk_widget_show(clist);
+      gtk_widget_show(scrolled_win);
       
       /* For the bottom-right cell we add the 'Reset Filter' button. */
       if (top == 2 && left == 2)
@@ -818,7 +837,7 @@ gtk_font_selection_init(GtkFontSelection *fontsel)
          gtk_table_attach (GTK_TABLE (table), vbox, left, left + 1,
                            top + 1, top + 2, GTK_FILL, GTK_FILL, 0, 0);
          
-         gtk_box_pack_start (GTK_BOX (vbox), clist, TRUE, TRUE, 0);
+         gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
          
          alignment = gtk_alignment_new(0.5, 0.0, 0.8, 0.0);
          gtk_widget_show(alignment);
@@ -832,7 +851,7 @@ gtk_font_selection_init(GtkFontSelection *fontsel)
                              fontsel);
        }
       else
-       gtk_table_attach (GTK_TABLE (table), clist,
+       gtk_table_attach (GTK_TABLE (table), scrolled_win,
                          left, left + 1, top + 1, top + 2,
                          GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
       
index 944cc81ec25b7673fdbe77812fde4b00b6d9b35e..046e5eb47280445e2ebee9cf89ba26c1726db017 100644 (file)
@@ -147,12 +147,8 @@ gtk_scrolled_window_set_arg (GtkObject        *object,
       GtkWidget *viewport;
 
     case ARG_VIEWPORT:
-      g_return_if_fail (scrolled_window->viewport == NULL);
       viewport = GTK_VALUE_POINTER (*arg);
-      if (!viewport)
-       viewport = gtk_viewport_new (NULL, NULL);
-      scrolled_window->viewport = viewport;
-      gtk_scrolled_window_construct (scrolled_window, NULL, NULL);
+      gtk_container_add (GTK_CONTAINER (scrolled_window), viewport);
     case ARG_HSCROLLBAR_POLICY:
       gtk_scrolled_window_set_policy (scrolled_window,
                                      GTK_VALUE_ENUM (*arg),
@@ -205,6 +201,7 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
   scrolled_window->vscrollbar = NULL;
   scrolled_window->hscrollbar_policy = GTK_POLICY_ALWAYS;
   scrolled_window->vscrollbar_policy = GTK_POLICY_ALWAYS;
+  scrolled_window->autogenerated_viewport = FALSE;
 }
 
 GtkWidget*
@@ -216,7 +213,7 @@ gtk_scrolled_window_new (GtkAdjustment *hadjustment,
   scrolled_window = gtk_type_new (GTK_TYPE_SCROLLED_WINDOW);
 
   gtk_scrolled_window_construct (GTK_SCROLLED_WINDOW (scrolled_window), hadjustment, vadjustment);
-  
+
   return scrolled_window;
 }
 
@@ -230,14 +227,13 @@ gtk_scrolled_window_construct (GtkScrolledWindow *scrolled_window,
   g_return_if_fail (scrolled_window->hscrollbar == NULL);
   g_return_if_fail (scrolled_window->vscrollbar == NULL);
 
-  if (scrolled_window->viewport)
-    g_return_if_fail (hadjustment == NULL && vadjustment == NULL);
-  else
-    scrolled_window->viewport = gtk_viewport_new (hadjustment, vadjustment);
+  scrolled_window->hscrollbar = gtk_hscrollbar_new (hadjustment);
+  scrolled_window->vscrollbar = gtk_vscrollbar_new (vadjustment);
 
-  hadjustment = gtk_viewport_get_hadjustment (GTK_VIEWPORT (scrolled_window->viewport));
-  vadjustment = gtk_viewport_get_vadjustment (GTK_VIEWPORT (scrolled_window->viewport));
-  gtk_container_set_resize_mode (GTK_CONTAINER (scrolled_window->viewport), GTK_RESIZE_PARENT);
+  hadjustment =
+    gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
+  vadjustment =
+    gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
 
   gtk_signal_connect (GTK_OBJECT (hadjustment), "changed",
                      (GtkSignalFunc) gtk_scrolled_window_adjustment_changed,
@@ -246,18 +242,12 @@ gtk_scrolled_window_construct (GtkScrolledWindow *scrolled_window,
                      (GtkSignalFunc) gtk_scrolled_window_adjustment_changed,
                      (gpointer) scrolled_window);
 
-  scrolled_window->hscrollbar = gtk_hscrollbar_new (hadjustment);
-  scrolled_window->vscrollbar = gtk_vscrollbar_new (vadjustment);
-
-  gtk_widget_set_parent (scrolled_window->viewport, GTK_WIDGET (scrolled_window));
   gtk_widget_set_parent (scrolled_window->hscrollbar, GTK_WIDGET (scrolled_window));
   gtk_widget_set_parent (scrolled_window->vscrollbar, GTK_WIDGET (scrolled_window));
 
-  gtk_widget_show (scrolled_window->viewport);
   gtk_widget_show (scrolled_window->hscrollbar);
   gtk_widget_show (scrolled_window->vscrollbar);
   
-  gtk_widget_ref (scrolled_window->viewport);
   gtk_widget_ref (scrolled_window->hscrollbar);
   gtk_widget_ref (scrolled_window->vscrollbar);
 }
@@ -344,7 +334,8 @@ gtk_scrolled_window_map (GtkWidget *widget)
       GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
       scrolled_window = GTK_SCROLLED_WINDOW (widget);
 
-      if (GTK_WIDGET_VISIBLE (scrolled_window->viewport) &&
+      if (scrolled_window->viewport &&
+         GTK_WIDGET_VISIBLE (scrolled_window->viewport) &&
          !GTK_WIDGET_MAPPED (scrolled_window->viewport))
        gtk_widget_map (scrolled_window->viewport);
 
@@ -371,7 +362,8 @@ gtk_scrolled_window_unmap (GtkWidget *widget)
       GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
       scrolled_window = GTK_SCROLLED_WINDOW (widget);
 
-      if (GTK_WIDGET_MAPPED (scrolled_window->viewport))
+      if (scrolled_window->viewport &&
+         GTK_WIDGET_MAPPED (scrolled_window->viewport))
        gtk_widget_unmap (scrolled_window->viewport);
 
       if (GTK_WIDGET_MAPPED (scrolled_window->hscrollbar))
@@ -397,7 +389,8 @@ gtk_scrolled_window_draw (GtkWidget    *widget,
     {
       scrolled_window = GTK_SCROLLED_WINDOW (widget);
 
-      if (gtk_widget_intersect (scrolled_window->viewport, area, &child_area))
+      if (scrolled_window->viewport &&
+         gtk_widget_intersect (scrolled_window->viewport, area, &child_area))
        gtk_widget_draw (scrolled_window->viewport, &child_area);
 
       if (gtk_widget_intersect (scrolled_window->hscrollbar, area, &child_area))
@@ -425,7 +418,8 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
   requisition->width = 0;
   requisition->height = 0;
 
-  if (GTK_WIDGET_VISIBLE (scrolled_window->viewport))
+  if (scrolled_window->viewport &&
+      GTK_WIDGET_VISIBLE (scrolled_window->viewport))
     {
       gtk_widget_size_request (scrolled_window->viewport, &scrolled_window->viewport->requisition);
 
@@ -483,7 +477,8 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
   if (scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
     scrolled_window->vscrollbar_visible = TRUE;
 
-  if (GTK_WIDGET_VISIBLE (scrolled_window->viewport))
+  if (scrolled_window->viewport &&
+      GTK_WIDGET_VISIBLE (scrolled_window->viewport))
     {
       count = 0;
 
@@ -562,13 +557,75 @@ gtk_scrolled_window_add (GtkContainer *container,
                         GtkWidget    *widget)
 {
   GtkScrolledWindow *scrolled_window;
+  GtkArgInfo *info_hadj;
+  GtkArgInfo *info_vadj;
+  GtkArg arg;
+  gchar *error;
 
   g_return_if_fail (container != NULL);
   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container));
   g_return_if_fail (widget != NULL);
 
   scrolled_window = GTK_SCROLLED_WINDOW (container);
-  gtk_container_add (GTK_CONTAINER (scrolled_window->viewport), widget);
+
+  if (scrolled_window->viewport)
+    gtk_container_remove (container, scrolled_window->viewport);
+
+  error = gtk_object_arg_get_info (GTK_OBJECT_TYPE (widget),
+                                  "hadjustment", &info_hadj);
+  if (!error)
+    {
+      error = gtk_object_arg_get_info (GTK_OBJECT_TYPE (widget),
+                                      "vadjustment", &info_vadj);
+  
+      if (!error)
+       {
+         gtk_object_set (GTK_OBJECT (widget),
+                         "hadjustment",
+                         gtk_scrolled_window_get_hadjustment
+                         (scrolled_window),
+                         "vadjustment",
+                         gtk_scrolled_window_get_vadjustment
+                         (scrolled_window),
+                         NULL);
+         scrolled_window->viewport = widget;
+         gtk_widget_set_parent (widget, GTK_WIDGET (scrolled_window));
+         gtk_widget_ref (widget);
+         scrolled_window->autogenerated_viewport = FALSE;
+       }
+    }
+
+  if (error)
+    {
+      g_free (error);
+
+      scrolled_window->viewport = gtk_viewport_new 
+       (gtk_scrolled_window_get_hadjustment (scrolled_window),
+        gtk_scrolled_window_get_vadjustment (scrolled_window));
+      gtk_widget_set_parent (scrolled_window->viewport,
+                            GTK_WIDGET (scrolled_window));
+      gtk_widget_ref (scrolled_window->viewport);
+      gtk_widget_show (scrolled_window->viewport);
+      scrolled_window->autogenerated_viewport = FALSE;
+
+      gtk_container_add (GTK_CONTAINER (scrolled_window->viewport), widget);
+
+      widget = scrolled_window->viewport;
+    }
+
+  if (GTK_WIDGET_VISIBLE (scrolled_window))
+    {
+      if (GTK_WIDGET_REALIZED (scrolled_window) &&
+         !GTK_WIDGET_REALIZED (widget))
+       gtk_widget_realize (widget);
+
+      if (GTK_WIDGET_MAPPED (scrolled_window) &&
+         !GTK_WIDGET_MAPPED (widget))
+       gtk_widget_map (widget);
+    }
+  
+  if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (scrolled_window))
+    gtk_widget_queue_resize (widget);
 }
 
 static void
@@ -582,15 +639,18 @@ gtk_scrolled_window_remove (GtkContainer *container,
   g_return_if_fail (widget != NULL);
 
   scrolled_window = GTK_SCROLLED_WINDOW (container);
-
   if (scrolled_window->viewport == widget ||
       scrolled_window->hscrollbar == widget ||
       scrolled_window->vscrollbar == widget)
     {
       /* this happens during destroy */
+
+      if (scrolled_window->viewport == widget)
+       scrolled_window->autogenerated_viewport = FALSE;
+
       gtk_widget_unparent (widget);
     }
-  else
+  else if (scrolled_window->autogenerated_viewport)
     gtk_container_remove (GTK_CONTAINER (scrolled_window->viewport), widget);
 }
 
@@ -608,16 +668,13 @@ gtk_scrolled_window_forall (GtkContainer *container,
 
   scrolled_window = GTK_SCROLLED_WINDOW (container);
 
+  if (scrolled_window->viewport)
+    (* callback) (scrolled_window->viewport, callback_data);
   if (include_internals)
     {
-      if (scrolled_window->viewport)
-       (* callback) (scrolled_window->viewport, callback_data);
-      
       (* callback) (scrolled_window->vscrollbar, callback_data);
       (* callback) (scrolled_window->hscrollbar, callback_data);
     }
-  else if (scrolled_window->viewport)
-    gtk_container_foreach (GTK_CONTAINER (scrolled_window->viewport), callback, callback_data);
 }
 
 static void
@@ -649,6 +706,7 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
                                        gpointer       data)
 {
   GtkScrolledWindow *scrolled_win;
+  gboolean visible;
 
   g_return_if_fail (adjustment != NULL);
   g_return_if_fail (data != NULL);
@@ -659,16 +717,22 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
     {
       if (scrolled_win->hscrollbar_policy == GTK_POLICY_AUTOMATIC)
        {
+         visible = scrolled_win->hscrollbar_visible;
          scrolled_win->hscrollbar_visible =
            ((adjustment->upper - adjustment->lower) > adjustment->page_size);
+         if (scrolled_win->hscrollbar_visible != visible)
+           gtk_widget_queue_resize (GTK_WIDGET (scrolled_win));
        }
     }
   else if (adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_win->vscrollbar)))
     {
       if (scrolled_win->vscrollbar_policy == GTK_POLICY_AUTOMATIC)
        {
+         visible = scrolled_win->vscrollbar_visible;
          scrolled_win->vscrollbar_visible =
            ((adjustment->upper - adjustment->lower) > adjustment->page_size);
+         if (scrolled_win->vscrollbar_visible != visible)
+           gtk_widget_queue_resize (GTK_WIDGET (scrolled_win));
        }
     }
   else
index 2c22202c3081f630763ce3f228542a998e4e10a1..a29c7b2e94adbfab6566c2413d6f5bb0330f9ea1 100644 (file)
@@ -49,10 +49,11 @@ struct _GtkScrolledWindow
   GtkWidget *hscrollbar;
   GtkWidget *vscrollbar;
 
-  guint8 hscrollbar_policy;
-  guint8 vscrollbar_policy;
-  gint hscrollbar_visible : 1;
-  gint vscrollbar_visible : 1;
+  guint hscrollbar_policy      : 2;
+  guint vscrollbar_policy      : 2;
+  guint hscrollbar_visible     : 1;
+  guint vscrollbar_visible     : 1;
+  guint autogenerated_viewport : 1;
 };
 
 struct _GtkScrolledWindowClass
index bc9f9460e75e91f02e4e06b313bb40cf70821209..1baf3a8874d81d03f87e4ba1db290dd8445b4164 100644 (file)
@@ -140,17 +140,11 @@ gtk_viewport_set_arg (GtkObject        *object,
       GtkAdjustment *adjustment;
 
     case ARG_HADJUSTMENT:
-      g_return_if_fail (viewport->hadjustment == NULL);
       adjustment = GTK_VALUE_POINTER (*arg);
-      if (!adjustment)
-       adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
       gtk_viewport_set_hadjustment (viewport, adjustment);
       break;
     case ARG_VADJUSTMENT:
-      g_return_if_fail (viewport->vadjustment == NULL);
       adjustment = GTK_VALUE_POINTER (*arg);
-      if (!adjustment)
-       adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
       gtk_viewport_set_vadjustment (viewport, adjustment);
       break;
     case ARG_SHADOW_TYPE:
@@ -210,12 +204,6 @@ gtk_viewport_new (GtkAdjustment *hadjustment,
 
   viewport = gtk_type_new (gtk_viewport_get_type ());
 
-  if (!hadjustment)
-    hadjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-
-  if (!vadjustment)
-    vadjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-
   gtk_viewport_set_hadjustment (viewport, hadjustment);
   gtk_viewport_set_vadjustment (viewport, vadjustment);
 
@@ -257,17 +245,22 @@ gtk_viewport_set_hadjustment (GtkViewport   *viewport,
 {
   g_return_if_fail (viewport != NULL);
   g_return_if_fail (GTK_IS_VIEWPORT (viewport));
-  g_return_if_fail (adjustment != NULL);
+  if (adjustment)
+    g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
 
-  if (viewport->hadjustment != adjustment)
+  if (viewport->hadjustment && viewport->hadjustment != adjustment)
     {
-      if (viewport->hadjustment)
-       {
-         gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment),
-                                        (gpointer) viewport);
-         gtk_object_unref (GTK_OBJECT (viewport->hadjustment));
-       }
+      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment),
+                                    (gpointer) viewport);
+      gtk_object_unref (GTK_OBJECT (viewport->hadjustment));
+    }
 
+  if (!adjustment)
+    adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,
+                                                    0.0, 0.0, 0.0));
+
+  if (viewport->hadjustment != adjustment)
+    {
       viewport->hadjustment = adjustment;
       gtk_object_ref (GTK_OBJECT (viewport->hadjustment));
       gtk_object_sink (GTK_OBJECT (viewport->hadjustment));
@@ -289,17 +282,22 @@ gtk_viewport_set_vadjustment (GtkViewport   *viewport,
 {
   g_return_if_fail (viewport != NULL);
   g_return_if_fail (GTK_IS_VIEWPORT (viewport));
-  g_return_if_fail (adjustment != NULL);
+  if (adjustment)
+    g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
 
-  if (viewport->vadjustment != adjustment)
+  if (viewport->vadjustment && viewport->vadjustment != adjustment)
     {
-      if (viewport->vadjustment)
-       {
-         gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment),
-                                        (gpointer) viewport);
-         gtk_object_unref (GTK_OBJECT (viewport->vadjustment));
-       }
+      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment),
+                                    (gpointer) viewport);
+      gtk_object_unref (GTK_OBJECT (viewport->vadjustment));
+    }
+
+  if (!adjustment)
+    adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,
+                                                    0.0, 0.0, 0.0));
 
+  if (viewport->vadjustment != adjustment)
+    {
       viewport->vadjustment = adjustment;
       gtk_object_ref (GTK_OBJECT (viewport->vadjustment));
       gtk_object_sink (GTK_OBJECT (viewport->vadjustment));
index 98cb6f20ad41d8aeab8d013abbff8ddf27f1156a..1aafdbc2c2f27a047d09b01ccc0292ffab109a6a 100644 (file)
@@ -3261,7 +3261,7 @@ create_list (void)
 
       scrolled_win = gtk_scrolled_window_new (NULL, NULL);
       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-                                     GTK_POLICY_AUTOMATIC, 
+                                     GTK_POLICY_AUTOMATIC,
                                      GTK_POLICY_AUTOMATIC);
       gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
       gtk_widget_set_usize (scrolled_win, -1, 300);
@@ -3876,6 +3876,7 @@ create_clist (void)
   GtkWidget *clist;
   GtkWidget *button;
   GtkWidget *separator;
+  GtkWidget *scrolled_win;
 
   GtkWidget *undo_button;
   GtkWidget *label;
@@ -3905,6 +3906,12 @@ create_clist (void)
       /* create GtkCList here so we have a pointer to throw at the 
        * button callbacks -- more is done with it later */
       clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
+      gtk_widget_show (clist);
+      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                     GTK_POLICY_AUTOMATIC, 
+                                     GTK_POLICY_AUTOMATIC);
+      gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
       /*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/
 
       gtk_signal_connect (GTK_OBJECT (clist), "click_column",
@@ -4014,8 +4021,6 @@ create_clist (void)
       gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
 
       gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
-      gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC,
-                           GTK_POLICY_AUTOMATIC);
 
       gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
                                          GTK_JUSTIFY_RIGHT);
@@ -4062,8 +4067,8 @@ create_clist (void)
            }
        }
 
-      gtk_container_border_width (GTK_CONTAINER (clist), 5);
-      gtk_box_pack_start (GTK_BOX (box2), clist, TRUE, TRUE, 0);
+      gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
+      gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
 
       separator = gtk_hseparator_new ();
       gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
@@ -4427,6 +4432,7 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree)
   static GtkWidget *export_window = NULL;
   static GtkCTree *export_ctree;
   GtkWidget *vbox;
+  GtkWidget *scrolled_win;
   GtkWidget *button;
   GtkWidget *sep;
   GNode *gnode;
@@ -4459,12 +4465,15 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree)
       export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
       gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
 
-      gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (export_ctree),
-                         TRUE, TRUE, 0);
+      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+      gtk_container_add (GTK_CONTAINER (scrolled_win),
+                        GTK_WIDGET (export_ctree));
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                     GTK_POLICY_AUTOMATIC,
+                                     GTK_POLICY_AUTOMATIC);
+      gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
       gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
                                    GTK_SELECTION_EXTENDED);
-      gtk_clist_set_policy (GTK_CLIST (export_ctree), GTK_POLICY_ALWAYS, 
-                           GTK_POLICY_AUTOMATIC);
       gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
       gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
       gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
@@ -4732,6 +4741,7 @@ void create_ctree (void)
   static GtkWidget *window = NULL;
   GtkTooltips *tooltips;
   GtkCTree *ctree;
+  GtkWidget *scrolled_win;
   GtkWidget *vbox;
   GtkWidget *bbox;
   GtkWidget *mbox;
@@ -4866,10 +4876,13 @@ void create_ctree (void)
       gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
                                GTK_SIGNAL_FUNC (after_press), NULL);
       
-      gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0);
+      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+      gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                     GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+      gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
+      gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
       gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
-      gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS, 
-                           GTK_POLICY_AUTOMATIC);
       gtk_clist_set_column_min_width (GTK_CLIST (ctree), 0, 50);
       gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
       gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
@@ -7997,7 +8010,6 @@ create_main_window (void)
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
                                  GTK_POLICY_AUTOMATIC, 
                                   GTK_POLICY_AUTOMATIC);
-  GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar, GTK_CAN_FOCUS);
   gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
 
   box2 = gtk_vbox_new (FALSE, 0);
index 98cb6f20ad41d8aeab8d013abbff8ddf27f1156a..1aafdbc2c2f27a047d09b01ccc0292ffab109a6a 100644 (file)
@@ -3261,7 +3261,7 @@ create_list (void)
 
       scrolled_win = gtk_scrolled_window_new (NULL, NULL);
       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-                                     GTK_POLICY_AUTOMATIC, 
+                                     GTK_POLICY_AUTOMATIC,
                                      GTK_POLICY_AUTOMATIC);
       gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
       gtk_widget_set_usize (scrolled_win, -1, 300);
@@ -3876,6 +3876,7 @@ create_clist (void)
   GtkWidget *clist;
   GtkWidget *button;
   GtkWidget *separator;
+  GtkWidget *scrolled_win;
 
   GtkWidget *undo_button;
   GtkWidget *label;
@@ -3905,6 +3906,12 @@ create_clist (void)
       /* create GtkCList here so we have a pointer to throw at the 
        * button callbacks -- more is done with it later */
       clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
+      gtk_widget_show (clist);
+      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                     GTK_POLICY_AUTOMATIC, 
+                                     GTK_POLICY_AUTOMATIC);
+      gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
       /*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/
 
       gtk_signal_connect (GTK_OBJECT (clist), "click_column",
@@ -4014,8 +4021,6 @@ create_clist (void)
       gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
 
       gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
-      gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC,
-                           GTK_POLICY_AUTOMATIC);
 
       gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
                                          GTK_JUSTIFY_RIGHT);
@@ -4062,8 +4067,8 @@ create_clist (void)
            }
        }
 
-      gtk_container_border_width (GTK_CONTAINER (clist), 5);
-      gtk_box_pack_start (GTK_BOX (box2), clist, TRUE, TRUE, 0);
+      gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
+      gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
 
       separator = gtk_hseparator_new ();
       gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
@@ -4427,6 +4432,7 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree)
   static GtkWidget *export_window = NULL;
   static GtkCTree *export_ctree;
   GtkWidget *vbox;
+  GtkWidget *scrolled_win;
   GtkWidget *button;
   GtkWidget *sep;
   GNode *gnode;
@@ -4459,12 +4465,15 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree)
       export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
       gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
 
-      gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (export_ctree),
-                         TRUE, TRUE, 0);
+      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+      gtk_container_add (GTK_CONTAINER (scrolled_win),
+                        GTK_WIDGET (export_ctree));
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                     GTK_POLICY_AUTOMATIC,
+                                     GTK_POLICY_AUTOMATIC);
+      gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
       gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
                                    GTK_SELECTION_EXTENDED);
-      gtk_clist_set_policy (GTK_CLIST (export_ctree), GTK_POLICY_ALWAYS, 
-                           GTK_POLICY_AUTOMATIC);
       gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
       gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
       gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
@@ -4732,6 +4741,7 @@ void create_ctree (void)
   static GtkWidget *window = NULL;
   GtkTooltips *tooltips;
   GtkCTree *ctree;
+  GtkWidget *scrolled_win;
   GtkWidget *vbox;
   GtkWidget *bbox;
   GtkWidget *mbox;
@@ -4866,10 +4876,13 @@ void create_ctree (void)
       gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
                                GTK_SIGNAL_FUNC (after_press), NULL);
       
-      gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0);
+      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+      gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                     GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+      gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
+      gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
       gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
-      gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS, 
-                           GTK_POLICY_AUTOMATIC);
       gtk_clist_set_column_min_width (GTK_CLIST (ctree), 0, 50);
       gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
       gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
@@ -7997,7 +8010,6 @@ create_main_window (void)
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
                                  GTK_POLICY_AUTOMATIC, 
                                   GTK_POLICY_AUTOMATIC);
-  GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar, GTK_CAN_FOCUS);
   gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
 
   box2 = gtk_vbox_new (FALSE, 0);